【问题标题】:How to set dateFormat for jQuery UI datepicker according to server date format?如何根据服务器日期格式为 jQuery UI datepicker 设置 dateFormat?
【发布时间】: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(); }
})

【问题讨论】:

    标签: jquery asp.net asp.net-mvc jquery-ui datepicker


    【解决方案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下。希望有人会为您提供完整的答案。祝你好运。 :)
    • 无论如何,非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多