Compare dates with javascript
本问题已经有最佳答案,请猛点这里访问。
我在javascript中有两个日期:
1 2 | var first = '2012-11-21'; var second = '2012-11-03'; |
我想做:
1 2 3 | if(first > second){ //... } |
如果没有外部库,最好的方法是什么?
1 2 3 4 | if( (new Date(first).getTime() > new Date(second).getTime())) { ---------------------------------- } |
如果您的日期是严格的
1 | if(first > second){ |
…将进行lexographic(即字母数字"字典顺序")字符串比较-将比较每个字符串的第一个字符,然后比较每个字符串的第二个字符,等等,这将给出您想要的结果…
你可以这样做,它会很好地工作:
1 2 3 4 5 6 7 8 | var date1 = new Date('2013-07-30'); var date2 = new Date('2013-07-30'); if(date1 === date2){ console.log("both are equal");} //it does not work ==>undefined //result if(+date1 === +date2){ console.log("both are equal");} //do it this way! //(use + prefix for a variable that holds a date value) ==> both are equal //result |
注意:不要忘记使用+前缀
由于日期格式的原因,您可以使用以下代码:
1 2 3 | if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){ //... } |
检查
最好的办法是,
1 2 3 4 5 6 | var first = '2012-11-21'; var second = '2012-11-03'; if (new Date(first) > new Date(second) { ..... } |
在javascript中使用此函数进行日期比较:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function fn_DateCompare(DateA, DateB) { 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; // less than else if (parseFloat(msDateA) == parseFloat(msDateB)) return 0; // equal else if (parseFloat(msDateA) > parseFloat(msDateB)) return 1; // greater than else return null; // error } |
你也可以这样做。
1 2 3 | if (dateFormat(first,"yyyy-mm-dd") > dateFormat(second,"yyyy-mm-dd")) { console.log("done"); } |
或
1 2 3 | if (dateFormat(first,"mm-dd-yyyy") > dateFormat(second,"mm-dd-yyyy")) { console.log("done"); } |
我对dateformat()使用以下插件
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | var dateFormat = function () { var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g, timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, timezoneClip = /[^-+\dA-Z]/g, pad = function (val, len) { val = String(val); len = len || 2; while (val.length < len) val ="0" + val; return val; }; // Regexes and supporting functions are cached through closure return function (date, mask, utc) { var dF = dateFormat; // You can't provide utc if you skip other args (use the"UTC:" mask prefix) if (arguments.length == 1 && Object.prototype.toString.call(date) =="[object String]" && !/\d/.test(date)) { mask = date; date = undefined; } // Passing date through Date applies Date.parse, if necessary date = date ? new Date(date) : new Date; if (isNaN(date)) throw SyntaxError("invalid date"); mask = String(dF.masks[mask] || mask || dF.masks["default"]); // Allow setting the utc argument via the mask if (mask.slice(0, 4) =="UTC:") { mask = mask.slice(4); utc = true; } var _ = utc ?"getUTC" :"get", d = date[_ +"Date"](), D = date[_ +"Day"](), m = date[_ +"Month"](), y = date[_ +"FullYear"](), H = date[_ +"Hours"](), M = date[_ +"Minutes"](), s = date[_ +"Seconds"](), L = date[_ +"Milliseconds"](), o = utc ? 0 : date.getTimezoneOffset(), flags = { d: d, dd: pad(d), ddd: dF.i18n.dayNames[D], dddd: dF.i18n.dayNames[D + 7], m: m + 1, mm: pad(m + 1), mmm: dF.i18n.monthNames[m], mmmm: dF.i18n.monthNames[m + 12], yy: String(y).slice(2), yyyy: y, h: H % 12 || 12, hh: pad(H % 12 || 12), H: H, HH: pad(H), M: M, MM: pad(M), s: s, ss: pad(s), l: pad(L, 3), L: pad(L > 99 ? Math.round(L / 10) : L), t: H < 12 ?"a" :"p", tt: H < 12 ?"am" :"pm", T: H < 12 ?"A" :"P", TT: H < 12 ?"AM" :"PM", Z: utc ?"UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip,""), o: (o > 0 ?"-" :"+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4), S: ["th","st","nd","rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] }; return mask.replace(token, function ($0) { return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1); }); }; }(); // Some common format strings dateFormat.masks = { "default": "ddd mmm dd yyyy HH:MM:ss", shortDate: "m/d/yy", mediumDate: "mmm d, yyyy", longDate: "mmmm d, yyyy", fullDate: "dddd, mmmm d, yyyy", shortTime: "h:MM TT", mediumTime: "h:MM:ss TT", longTime: "h:MM:ss TT Z", isoDate: "yyyy-mm-dd", isoTime: "HH:MM:ss", isoDateTime: "yyyy-mm-dd'T'HH:MM:ss", isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'" }; // Internationalization strings dateFormat.i18n = { dayNames: [ "Sun","Mon","Tue","Wed","Thu","Fri","Sat", "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" ], monthNames: [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec", "January","February","March","April","May","June","July","August","September","October","November","December" ] }; // For convenience... Date.prototype.format = function (mask, utc) { return dateFormat(this, mask, utc); }; |