How do I do a Date comparison in Javascript?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Compare 2 dates with JavaScript
我想在javascript中比较两个日期。我一直在做一些调查,但我能找到的只是如何返回当前日期。我想比较两个不同的日期,与今天无关。我该怎么做?
1 | var startDate = Date(document.form1.Textbox2); |
1 2 3 | if (date1.getTime() > date2.getTime()) { alert("The first date is after the second date!"); } |
对日期对象的引用
1 | new Date('1945/05/09').valueOf() < new Date('2011/05/09').valueOf() |
Javascript的日期可以使用相同的比较运算符进行比较,其余数据类型使用:>、<、<=、>=、==、!=,==,!=
如果你有两个日期A和B,那么如果A比B更回到过去,那么A
但听起来你遇到的麻烦是把一根绳子变成一个日期。为此,只需将字符串作为新日期的参数传递:
1 | var someDate = new Date("12/03/2008"); |
或者,如果所需的字符串是表单域的值,则可能是:
1 | var someDate = new Date(document.form1.Textbox2.value); |
如果该字符串不是Javascript识别为日期的字符串,您仍然会得到一个日期对象,但它将是"无效的"。任何与其他日期的比较都将返回false。当转换为字符串时,它将变为"无效日期"。它的getTime()函数将返回NaN,对日期本身调用is nan()将返回true;这是检查字符串是否为有效日期的简单方法。
可以对日期对象使用getTime()方法来获取与1970年1月1日相关的时间戳(以毫秒为单位)。如果将两个日期转换为整数时间戳,则可以通过减去它们来比较差异。结果将以毫秒为单位,所以您只需除以1000秒,然后除以60分钟,以此类推。
我宁愿使用日期值of方法而不是==或!=
似乎==正在比较内部对象的引用,与日期无关。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function fn_DateCompare(DateA, DateB) { // this function is good for dates > 01/01/1970 var a = new Date(DateA); var b = new Date(DateB); var msDateA = Date.UTC(a.getFullYear(), a.getMonth()+1, a.getDate()); var msDateB = Date.UTC(b.getFullYear(), b.getMonth()+1, b.getDate()); if (parseFloat(msDateA) < parseFloat(msDateB)) return -1; // lt else if (parseFloat(msDateA) == parseFloat(msDateB)) return 0; // eq else if (parseFloat(msDateA) > parseFloat(msDateB)) return 1; // gt else return null; // error } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | function validateform() { if (trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value) !="") { if (!isDate(trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value))) msg = msg +" <li> Please enter valid From Date in mm/dd/yyyy format "; else { var toDate = new Date(); var txtdate = document.getElementById("<%=txtFromDate.ClientID %>").value; var d1 = new Date(txtdate) if (Date.parse(txtdate) > Date.parse(toDate)) { msg = msg +" <li> From date must be less than or equal to today's date "; } } } if (trimAll(document.getElementById("<%=txtToDate.ClientID %>").value) !="") { if (!isDate(trimAll(document.getElementById("<%=txtToDate.ClientID %>").value))) msg = msg +" <li> Please enter valid To Date in mm/dd/yyyy format "; else { var toDate = new Date(); var txtdate = document.getElementById("<%=txtToDate.ClientID %>").value; var d1 = new Date(txtdate) if (Date.parse(txtdate) > Date.parse(toDate)) { msg = msg +" <li> To date must be less than or equal to today's date "; } } } |
您可以尝试使用此代码检查两个日期中哪个日期值最大,格式为mm/dd/yyyy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function d_check() { var dl_sdt=document.getElementIdBy("date_input_Id1").value; //date one var dl_endt=document.getElementIdBy("date_input_Id2").value; //date two if((dl_sdt.substr(6,4)) > (dl_endt.substr(6,4))) { alert("first date is greater"); return false; } else if((((dl_sdt.substr(0,2)) > (dl_endt. substr(0,2)))&&(frdt(dl_sdt.substr(3,2)) > (dl_endt.substr(3,2))))|| (((dl_sdt.substr(0,2)) > (dl_endt.substr(0,2)))&& ((dl_sdt.substr(3,2)) < (dl_endt.substr(3,2))))|| (((dl_sdt.substr(0,2)) == (dl_endt.substr(0,2)))&&((dl_sdt.substr(3,2)) > (dl_endt.substr(3,2))))) { alert("first date is greater"); return false; } alert("second date is digher"); return true; } |
/*如果要检查此项,请创建一个表单并将ID提供给两个日期输入。日期格式应为mm/dd/yyyy或mm-dd-yyyy或mm:dd:yyyy或mm.dd.yyyy,如下所示。*/
您可以尝试添加以下脚本代码来实现此功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | if(CompareDates(smallDate,largeDate,'-') == 0) { alert('Selected date must be current date or previous date!'); return false; } function CompareDates(smallDate,largeDate,separator) { var smallDateArr = Array(); var largeDateArr = Array(); smallDateArr = smallDate.split(separator); largeDateArr = largeDate.split(separator); var smallDt = smallDateArr[0]; var smallMt = smallDateArr[1]; var smallYr = smallDateArr[2]; var largeDt = largeDateArr[0]; var largeMt = largeDateArr[1]; var largeYr = largeDateArr[2]; if(smallYr>largeYr) return 0; else if(smallYr<=largeYr && smallMt>largeMt) return 0; else if(smallYr<=largeYr && smallMt==largeMt && smallDt>largeDt) return 0; else return 1; } |