2011-05-11 17 views
25

当使用jQuery UI Datepicker时,我们在Google Chrome中使用时遇到了一个问题:当我们输入日期高于12的日期时,它不接受它作为有效日期,这是因为chrome认为dateformat是mm/dd/yyyy。我们试图通过添加代码来解决这个问题,试图迫使日期设置为DD/MM/YYYYJquery Datepicker Chrome

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

有什么办法解决这个问题,所以我们的日期选择器将接受DD/MM/YYYY值? 我们在谷歌浏览器中只有这个问题,datefix适用于firefox,例如& safari。 我们在这个项目中使用ASPX & MVC3。

如果有人能解决我们的问题,那将是巨大

感谢

回答

44

我有同样的问题,并与所有基于Webkit的网络浏览器有关。如果您设置大写字母M,则文本框将显示带有字母的飞蛾。对我来说,最好的解决办法是覆盖从jquery.validate.js的验证日期功能

创建jquery.validate.date.js并确保其jquery.validate.js后加载

下面的代码添加到jquery.validate.date.js

$(function() { 
    $.validator.methods.date = function (value, element) { 
     if ($.browser.webkit) { 

      //ES - Chrome does not use the locale when new Date objects instantiated: 
      var d = new Date(); 

      return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value))); 
     } 
     else { 

      return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); 
     } 
    }; 
}); 
+8

新的日期(d.toLocaleDateString(值)),将始终是当前的日期和不反光的值的字符串。 – 2011-11-30 07:53:26

+0

非常感谢这一个 – 2011-12-16 05:47:41

+0

这节省了我几个小时的麻烦:) – gls123 2012-06-19 08:13:45

26

user1011138解决方案不为我工作,因为.toLocaleDateString(value)不解析value

这是我为J想出=> 解决方案query.validate.js找到这个函数的定义: “日期:函数(值,元素)”,并与替换代码:

// http://docs.jquery.com/Plugins/Validation/Methods/date 
date: function (value, element) { 
    var d = value.split("/"); 
    return this.optional(element) || !/Invalid|NaN/.test(new Date((/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) ? d[1] + "/" + d[0] + "/" + d[2] : value)); 
}, 
+1

只需确保在阵列末尾调整阵列的格式,但是这对我来说很有用,谢谢 – Sam 2013-10-08 07:28:35

+0

有个问题,我如何才能验证它在31天,12个月和几年?可能吗? – 2013-10-24 21:56:30

+1

解决了这个问题。基本上,问题与“chrome”和“chromiun”有关。问题与jquery 1.8+一致。我认为这是一个临时修复,因为取决于最新的jquery更新。谢谢@Chtiwi Malek – MrMins 2015-01-21 17:02:23

3
$.validator.methods.date = function (value, element) {     
      if ($.browser.webkit) {      
       var d = value.split("/"); 
       return this.optional(element) || !/Invalid|NaN/.test(new Date((/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) ? d[1] + "/" + d[0] + "/" + d[2] : value)); 
       } 
      else { 
       return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); 
      } 
     }; 
+0

Thnx Chtiwi Malek为您的代码。这段代码适用于Chrome和Firefox。 – 2015-11-28 06:33:12

+0

最好给你的代码添加一些解释 – 2015-11-28 06:38:17

+0

好的灵感,它适用于我的一些修改 – 2016-02-17 11:03:35

4

创建一个新的文件jquery.validate.date.js。

将以下代码粘贴到文件中。

$(function() { 
    $.validator.methods.date = function (value, element) { 
     if ($.browser.webkit) { 
     var d = new Date(); 
     return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value))); 
     } 
     else { 
     return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); 
    } 
    }; 
}); 

现在确保该文件在jquery.validate.js文件后加载。因为jQuery浏览器检查已被弃用扔jquery.validate.min.js Uncaught TypeError: Cannot read property 'webkit' of undefined. Exception occurred when checking element DateOfBirth, check the 'date'

在我的项目

+0

我正面临着确切的问题,您的脚本对我来说工作正常..但我不确定您的脚本正确地执行了什么操作?它有什么限制吗? – 2016-05-23 20:35:51

+0

代码首先检查浏览器。如果条件是铬,而其他浏览器是其他条件。由于Chrome在新的Date对象实例化时不使用语言环境,这就是为什么.toLocaleDateString(value)用于Chrome的原因,其他浏览器并不介意。 – Milan 2016-05-24 05:03:03

+0

您是否复制粘贴2011年编写的此解决方案? http://stackoverflow.com/a/7878085/80434 – Korayem 2016-06-09 23:05:53

1

上述解决方案没有工作,我用momentjsbootstrap datetimepicker,因此该方案的伟大工程:

$(function() { 
    $.validator.methods.date = function (value, element) { 
     return this.optional(element) || moment(value, 'DD/MM/YYYY').isValid(); 
    }; 
}); 

调用此权后loading jquery.validate()

+0

这对我工作,非常感谢你! – user3284707 2016-07-10 14:43:41

+0

很高兴听到!分享爱与提出答案请@ user3284707 – Korayem 2016-07-10 22:25:06

+0

我已upvoted ..它在-1之前:) – user3284707 2016-07-11 19:51:15

2

你必须用'en-GB'日期验证来覆盖默认的'en-US'日期验证。

  • 成 'en-US'=> 'MM/DD/YY'
  • 成 'en-GB'=> 'DD/MM/YY'

解决方案:

在您的项目

添加一个“jquery.validate.date.js”文件,并把下面的代码在它:

//To Fix jQuery date format 'en-GB' validation problem in Chrome 
$(function() { 
    $.validator.addMethod(
     "date", 
     function (value, element) { 
      var bits = value.match(/([0-9]+)/gi), str; 
      if (!bits) 
       return this.optional(element) || false; 
      str = bits[1] + '/' + bits[0] + '/' + bits[2]; 
      return this.optional(element) || !/Invalid|NaN/.test(new Date(str)); 
     }, 
     "Please enter date in valid format [dd/mm/yyyy]" 
    ); 
}); 

,并确保其升在“jquery.validate.min.js”后OAD:

<script type="text/javascript" src="/Scripts/jquery-3.1.0.min.js"></script> 
<script type="text/javascript" src="/Scripts/jquery.validate.min.js"></script> 
<script type="text/javascript" src="/Scripts/jquery.validate.date.js"></script>