2014-11-03 72 views
0

这里是我的问题:新日期将无效的日期,也无法验证日期正确

new Date('02/30/2000') 

的Javascript转换为:

Wed Mar 01 2000 00:00:00 GMT-0300 (Local Standard Time) 

我不能验证日期这样,如果JavaScript的保留“自动更正'日期。
我正在使用isNaN来检查日期是否有效,但我想它永远不会工作,因为我想。
我该如何解决这个问题?

回答

2

您描述的行为恰恰是JavaScript Date对象的工作原理。 The MDN reference把它描述得很好如下:

注:日期被称为具有一个以上参数的构造,如果值低于其逻辑范围更大(如13设置为月份值或分钟值为70),相邻值将被调整。例如。 新日期(2013,13,1)相当于新日期(2014,1,1),均创建日期为2014-02-01(注意该月为0)。同样对于其他值:新日期(2013,2,1,0,70)相当于新日期(2013,2,1,1,10)这两者都创建日期为2013-03-01T01 :10:00

有没有内置的方法来解决此问题。但是,已经编写了一些库来解决Date对象的这个问题和其他问题。具体而言,可以考虑moment.js

moment('02/30/2000','MM/DD/YYYY').isValid() // false 
1
var dateString = '01/03/2012'; 
var checkDate; 
var flag = true; 

try { 
    checkDate = $.datepicker.parseDate('mm/dd/yy', dateString); 
} catch (e) { 
    flag = false; 
} 
if(flag) 
    alert('Valid Date'); 
else 
    alert('Invalid Date'); 
+1

哇! - 谁说的JQuery或日期选择器什么? – 2014-11-03 18:34:24

+0

我认为最好是使用jquery而不是使用全新的资产来验证日期 – rishiAgar 2014-11-03 18:36:36

1

这里是你如何能做到这一点:

var ValidDate = function (string) { 
    var dateParts = string.match(/(\d{2})\/(\d{2})\/(\d{4})/), 
     year = dateParts[3], 
     month = dateParts[1], 
     day = dateParts[2]; 

    var jsDate = new Date(string); 

    if (year != jsDate.getFullYear() || month != jsDate.getMonth() + 1 || day != jsDate.getDate()) { 
     return NaN; 
    } 
    return jsDate; 
} 


console.log(ValidDate("01/05/1989")); // => Thu Jan 05 1989 ... 
console.log(ValidDate("40/05/2010")); // => NaN 
console.log(ValidDate("05/40/2000")); // => NaN