dd-mm-yyyy Google Chrome 的日期验证错误 [重复]

Posted

技术标签:

【中文标题】dd-mm-yyyy Google Chrome 的日期验证错误 [重复]【英文标题】:dd-mm-yyyy Date Validation Error with Google Chrome [duplicate] 【发布时间】: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 的值对于出生日期无效

请帮我解决这个问题。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

解决我所做的问题:

    添加对脚本 datepicker-fr.js 的引用(可以找到 这里https://github.com/jquery/jquery-ui/tree/master/ui/i18n)。

    创建一个函数并将其添加到我的自定义 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

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

            $(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)?\d2)$|^(?: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)?\d2)$/.test(value);
        
    );

【讨论】:

【参考方案4】:

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

https://***.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 中已经提供了指向该问题的链接。) 很抱歉试图分享这些信息。你能建议我应该做什么/应该做什么吗? 识别重复的问题并标记它们或投票关闭它们,具体取决于您的权限级别。按照“在这些特定情况下的情况下,此处的答案可能有用”这一行,对该问题发表评论。 (这是我提供的常见问题解答链接中的建议。)

以上是关于dd-mm-yyyy Google Chrome 的日期验证错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何安装低版本google chrome

google-chrome的安装

Fedora32安装google chrome

Ubuntu怎样安装Google Chrome

如何解决ajax在google chrome浏览器上失效

将 datetimepicker 的默认格式设置为 dd-MM-yyyy