【问题标题】:Jquery datepicker taking US date format for validationJquery datepicker 采用美国日期格式进行验证
【发布时间】:2012-05-29 05:23:05
【问题描述】:

如果我选择日期 >12,我会在 chrome 上收到验证消息

我使用了带有语法的本地化日期选择器

var abc = $("#culture").val();
        $.datepicker.setDefaults($.datepicker.regional[""]);

        $("#dob").datepicker({
            changeMonth: true,
            changeYear: true,
            dateFormat: 'dd-mm-yy',
            yearRange: '-90:-15',
            defaultDate: '-90y'

        });
        $.datepicker.setDefaults($.datepicker.regional[abc]);


另一个问题:我在控制器上以不受欢迎的格式获取日期,这就是为什么我的数据库包含错误的条目(日期代替月份和月份代替日期)..建议我可能的解决方案...

我发现相关的是LINK 1

Link2

Link 3

但以上都不起作用...

【问题讨论】:

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


    【解决方案1】:

    首先,如果您使用的是 MVC,并且您显示了来自服务器的某个日期,您应该显示如下日期:

    @Html.TextBox("InsertDate", Model.InsertDate.ToString("dd/MM/yyyy"), new { @class = "date" })
    

    在你的 jquery 中:

    $('.date').datepicker({ dateFormat: "dd/mm/yy" }).val();
    

    如果您的文化是美国文化,则 ModelState.IsValid 将中断。 一个肮脏的黑客是这样的:

    var insertDateStr = ModelState.Values.ToList()[3].Value.AttemptedValue;
    var insertDate = DateTime.ParseExact(insertDateStr, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None);
    

    最后,对于 chrome 上的红色,只需在文本框样式中添加背景颜色白色即可。

    @Html.TextBox("InsertDate", Model.InsertDate.ToString("dd/MM/yyyy"), new { @class = "date", @style = "background-color: white;" })
    

    它很脏,但它可以工作..

    【讨论】:

      【解决方案2】:

      解决方案不是那么简单,您最终应该覆盖 jquery 验证规则。我建议使用这里 MVC 3 jQuery Validation/globalizing of number/decimal field

      中所述的 Globalize 插件

      【讨论】:

        【解决方案3】:

        试试这个:

        $("#dob").datepicker({
            changeMonth: true,
            changeYear: true,
            dateFormat: 'mm-dd-yy',
            yearRange: '-90:-15',
            defaultDate: '-90y'
        });  
        
        var abc = $("#culture").val();  
        
        $("#dob").datepicker("setDate", new Date(abc));
        
        $("#dob").datepicker({
            changeMonth: true,
            changeYear:  true,
            dateFormat:  'dd-mm-yy',
            yearRange:   '-90:-15',
            defaultDate: '-90y'
        });
        

        否则,您可以将日期作为字符串,然后转换为所需的格式。

        如果您使用 jQuery 运行,则可以使用 datepicker UI 库的 parseDate 函数将字符串转换为日期:

        var d = $.datepicker.parseDate("DD, MM dd, yy",  "Sunday, February 28, 2010");
        

        然后用formatDate方法跟进,得到你想要的字符串格式:

        var datestrInNewFormat = $.datepicker.formatDate( "mm/dd/yy", d);
        

        如果您没有使用 jQuery,当然这可能不是最好的计划,因为您需要 jQuery 核心以及 datepicker UI 模块...最好遵循上面 Segfault 的建议来使用 date.js .

        【讨论】:

          【解决方案4】:

          如果您希望 ASP.Net 以 "dd-MM-yyyy" 格式确认日期,请在 web.config 中使用 <globalization culture="en-GB"/>

          reference

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-30
            • 2012-12-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-21
            • 1970-01-01
            相关资源
            最近更新 更多