【问题标题】:dd-mm-yyyy Date Validation Error with Google Chrome [duplicate]dd-mm-yyyy Google Chrome 的日期验证错误 [重复]
【发布时间】:2012-12-10 19:16:45
【问题描述】:

我正在开发一个 ASP.NET MVC4 应用程序。

我的视图模型类属性

[DisplayName("Birth Date")]
        [Required(ErrorMessage = "You must indicate your full birthday")]
        [DataType(DataType.Date), DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        public DateTime BirthDate { get; set; }

Javascript 代码

var dt = new Date();
    $(function () {
        $("#BirthDate").datepicker({
            showOn: "button",
            buttonImage: "@Url.Content("~/Content/themes/base/images/calendar.gif")",
            buttonImageOnly: true,
            dateFormat: 'dd/mm/yy',
            changeMonth: true,
            changeYear: true,
            yearRange: '1980:dt'
        });
    });

查看代码

<div class="block">
                    @Html.LabelFor(model => model.BirthDate, new { @Class = "compel" })
                    @Html.TextBoxFor(model => model.BirthDate)
                </div>

当我在 IE 和 Mozilla Firefox 中运行该应用程序时,它运行良好,但使用 google chrome 时,它​​会给出验证错误,因为 24/12/2012 的值对于出生日期无效

请帮我解决这个问题。

【问题讨论】:

    标签: google-chrome localization asp.net-mvc-4 jquery-validate date-format


    【解决方案1】:

    似乎 IE 和 Firefox 使用与 OS 相同的格式,而 Chrome 没有,这有时会导致日期验证出现问题。

    也许这会解决你的问题:Unobtrusive validation in Chrome won't validate with dd/mm/yyyy

    【讨论】:

      【解决方案2】:

      解决我所做的问题:

      1. 添加对脚本 datepicker-fr.js 的引用(可以找到 这里https://github.com/jquery/jquery-ui/tree/master/ui/i18n)。
      2. 创建一个函数并将其添加到我的自定义 javascript 文件中:

         function extendJQueryDateValidation() {
        
        // fix date validation for chrome
        jQuery.extend(jQuery.validator.methods, {
            date: function (value, element) {
                var isChrome = window.chrome;
                // make correction for chrome
                if (isChrome) {
                    var d = new Date();
                    return this.optional(element) ||
                    !/Invalid|NaN/.test($.datepicker.parseDate("dd/mm/yy", value));
                }
                    // leave default behavior
                else {
                    return this.optional(element) ||
                    !/Invalid|NaN/.test(new Date(value));
                }
            }
        });
        }
        

        参考http://devdens.blogspot.com/2011/11/jquery-validation-fix-for-date-format_29.html

      3. 在我有日期输入元素的页面中:

                $(function () 
             {          
              extendJQueryDateValidation();        
              $.datepicker.setDefaults($.datepicker.regional   ["fr"]);    
                       $("#dateField").datepicker(
            { yearRange: "1980:2015", 
         dateFormat: "dd/mm/yy", 
         changeMonth: true, 
         changeYear: true });
        
                   });
        

      【讨论】:

        【解决方案3】:

        你可以试试这个日期格式: 示例:“1999 年 12 月 31 日”

         jQuery.extend(jQuery.validator.methods, {
                date: function (value, element) {
                    return /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/.test(value);
                }
            });
        

        【讨论】:

          【解决方案4】:

          我搜索了这个并在这里和其他地方发现了多个问题。我找到了一个简单的解决方案,也想与未来的搜索者分享;

          https://stackoverflow.com/a/36903550/1997092

          我发现这个错误最简单的更正方法是下面的代码 调用验证文件后的 sn-p;

          jQuery.validator.methods["date"] = function (value, element){
              var shortDateFormat = "dd/mm/yy";
              var res = true;
              try {
                  $.datepicker.parseDate(shortDateFormat, value);
              } catch (error) {
                  res = false;
              }
              return res;
          }
          

          即使在 2016 年发现的版本中,如果没有 以上代码在 Chrome 而不是 Firefox 中。

          这是我的首选解决方案,因为它不需要任何额外的 库或插件工作。

          我在这里搜索问题时发现了这段代码 sn-p。

          希望对某人有所帮助。

          【讨论】:

          • 请不要发布指向duplicate answers的链接。相反,请考虑其他可以帮助未来用户找到所需答案的操作,如链接帖子中所述。 (进一步:previous answer 中已经提供了指向该问题的链接。)
          • 很抱歉试图分享这些信息。你能建议我应该做什么/应该做什么吗?
          • 识别重复的问题并标记它们或投票关闭它们,具体取决于您的权限级别。按照“在这些特定情况下的情况下,此处的答案可能有用”这一行,对该问题发表评论。 (这是我提供的常见问题解答链接中的建议。)
          猜你喜欢
          • 2013-07-06
          • 1970-01-01
          • 2011-02-12
          • 2022-11-29
          • 2015-10-30
          • 2014-03-30
          • 1970-01-01
          • 2012-05-05
          相关资源
          最近更新 更多