如何根据服务器日期格式为 jQuery UI datepicker 设置 dateFormat?

Posted

技术标签:

【中文标题】如何根据服务器日期格式为 jQuery UI datepicker 设置 dateFormat?【英文标题】:How to set dateFormat for jQuery UI datepicker according to server date format? 【发布时间】:2014-02-13 19:59:15 【问题描述】:

我正在使用 ASP.NET MVC 并使用两台服务器。在第一台服务器(用于测试)上,日期格式设置为 dd.mm.yy,但在第二台服务器上 - mm/dd/yy。问题是:是否可以根据站点工作的服务器日期格式为 jQuery UI datepicker 自定义 dateFormat?

呈现日期:

<%=html.EditorFor(p=>Model.myDate)%>

javascript 代码示例:

$('#myDate').datepicker(
    dateFormat: 'dd.mm.yy',
    onSelect: function (dateText)  doSomething(); ,
    onClose: function ()  doAction(); 
)

是否可以将强类型的dateFormat: 'dd.mm.yy' 替换为根据服务器日期格式格式化日期的东西?如果“是” - 怎么做?

目前,我正在使用一些临时解决方案:

$('#myDate').datepicker(
    dateFormat: $("#myDate").val().indexOf('/') > 0 ? 'mm/dd/yy' : 'dd.mm.yy',
    onSelect: function (dateText)  doSomething(); ,
    onClose: function ()  doAction(); 
)

【问题讨论】:

【参考方案1】:

您可以在控件上强制执行格式,即

@Html.TextBoxFor(m => m.OrderDate, String.Format("0:dd/M/yy", Model.YourDate),
  new  @class = "datepicker datepicker-init" )

jQuery UI 采用稍微不同的日期格式,即 dd/mm/y 而不是 mm/dd/yy 就像您的问题一样。

这样就可以了:

<script type="text/javascript">
        $(".datepicker").datepicker(
            minDate: 0,
            dateFormat: 'dd/mm/y'
        );

</script>

看这里:

http://jsfiddle.net/hutchonoid/Fa8Xx/1376/

如果这不好,您可以确定格式,并将其设置在您的 ViewModel 上,即

<script type="text/javascript">
        $(".datepicker").datepicker(
            minDate: 0,
            dateFormat: '@Model.MyDateFormat'
        );

</script>

更新

好的,要确定日期是否有正斜杠,您可以执行以下操作:

创建一个字符串扩展名,以任一方式替换它们;

public static string ContainsForwardSlashReplace(this string aString)

    return aString.Contains("/") ? aString.Replace("/",".") : aString.Replace(".","/");

然后在您的控制器中对您的格式化日期调用它,用于您返回的日期和您的 jQueryUI 格式。

下面是一个简单的控制台示例:

var aDate = DateTime.Now.ToString("d");
    // Change below to the oposite that is returned from above to test to other way
    //var aDate = "23/01/2014";
    var jqueryUiFormat = "dd/mm/y";
string newDate = aDate.ContainsForwardSlashReplace();
string newjQueryUiFormat = jqueryUiFormat.ContainsForwardSlashReplace();
Console.WriteLine("Original Date: 0", aDate);
Console.WriteLine("Replaced Date: 0", newDate);
Console.WriteLine("Original jQueryFormat : 0", jqueryUiFormat);
Console.WriteLine("Replaced jQueryFormat: 0", newjQueryUiFormat);

最后一步是将格式化日期和 jQuery ui 日期格式添加到您的模型中,并按照我上面的描述进行输出。

更新 (由问题作者)

似乎没有我正在寻找的解决方案。所以这个将被标记为解决方案。有关更多信息 - 请参阅 cmets。

【讨论】:

我澄清了问题(添加日期输入呈现示例)。至于 jQuery UI 采用稍微不同的日期格式,即 dd/mm/y 而不是 mm/dd/yy 在你的问题中。 - 我尝试格式 mm/dd/y 及其工作。 说到@Model.MyDateFormat - 这是个好主意。 这不是我想要的。 我明白你的意思,对不起,但我没有找到解决方法,除了上面包含在呈现 TextBoxFor 的模板的自定义编辑器中之外,它不包括 TextBoxFor下。希望有人会为您提供完整的答案。祝你好运。 :) 无论如何,非常感谢您的帮助。

以上是关于如何根据服务器日期格式为 jQuery UI datepicker 设置 dateFormat?的主要内容,如果未能解决你的问题,请参考以下文章

具有初始值的 JQuery UI Datepicker 日期格式问题

格式化 jQuery UI 日期选择器

jQuery UI Datepicker 将备用字段填充并格式化为 MySQL 日期

如何在 JQuery UI Datepicker 中使用不同的日期格式(用于在 html 上显示和存储在数据库中)?

jQuery UI DateTimepicker,选择日期后日期格式更改

在 jQuery UI 日期选择器中格式化日期