2013-05-10 88 views
1

我想比较两个日期字段..我已经得到了相当接近,它甚至能正常工作..比较日期字段

但是,当“TODATE”字段是

leap year>= "FromDate" 
问题就来了

对于如:

from date= 29/02/1996 
to date= 29/02/1996 
to date= 29/02/1992 
to date= 29/02/1995 

代码工作很好..

但如果

from date= 29/03/1996 
to date= 29/02/1996 

代码失败......

这是我的代码

function isDate(value) 
{ 
    var fromDate = document.getElementById("fromDate").value 
    var toDate= document.getElementById("toDate").value 
    var dateRegEx = null; 
    dateRegEx = new RegExp(/^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g); 

    if (dateRegEx.test(fromDate)){ 
    } 
    else{ 
     alert("Invalid from date"); 
     return false; 
    } 
    dateRegEx = new RegExp(/^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g); 
    if(dateRegEx.test(toDate)) { 
    } 
    else{ 
     alert("Invalid to date"); 
     return false; 
    } 
    var stDate = new Date(fromDate); 
    var enDate = new Date(toDate); 
    var compDate = enDate - stDate; 

    if(compDate > 0) 
     return true; 
    else 
    { 
     alert("Please Enter the correct date "); 
     return false; 
    } 
    /**/ 
} 

如何使所有闰年工作...在那里我将不得不作出的代码更改。

+0

Possibile重复:http://stackoverflow.com/questions/327429/whats-the-best-way-to-calculate-date-difference-in-javascript – 2013-05-10 12:11:55

+0

添加一个额外的条件来检查闰年 – 999k 2013-05-10 12:15:26

+0

两个日期领域单独工作很好... – razor 2013-05-10 12:18:16

回答

2

这是一个外观极好的jQuery插件做你想做什么:http://momentjs.com/

+0

Upvote所有发贴到momentjs! – Codesleuth 2013-05-10 12:10:54

+0

虽然时刻是一个伟大的插件...... OP甚至没有使用jQuery。 – jbabey 2013-05-10 12:11:32

+0

momentjs实际上并不是一个jQuery插件,所以这里适合。 – Codesleuth 2013-05-10 12:15:01

1

下面是使用moment.js一个解决方案:

function isDate(value) 
{ 
    var fromDate = moment(document.getElementById("fromDate").value); 
    var toDate = moment(document.getElementById("toDate").value); 

    if (fromDate.isValid()) { 
    } 
    else { 
     alert("Invalid from date"); 
     return false; 
    } 

    if(toDate.isValid()) { 
    } 
    else { 
     alert("Invalid to date"); 
     return false; 
    } 

    if(toDate.isAfter(fromDate)) 
     return true; 
    else 
    { 
     alert("Please Enter the correct date "); 
     return false; 
    } 
} 

根据你的日期是如何表示,你可能必须提供的那一刻构造用另一个参数来表示格式。见Validation