jQuery / JS – 如何比较两个日期/时间戳?

我有两个日期/时间戳:

d1 = 2011-03-02T15:30:18-08:00 d2 = 2011-03-02T15:36:05-08:00 

我想在上面比较两者:

 if (new Date(d1) < new Date(d2)) {alert('newer')} 

但这似乎没有正常工作。 有没有办法比较日期和时间。? 谢谢

更新:

 console.log(d1 + ' ' + d2); console.log(new Date(d1) > new Date(d2)) 2011-03-02T15:30:18-08:00 2011-03-02T15:36:05-08:00 false 2011-03-02T15:30:18-08:00 2011-03-02T15:30:18-08:00 false 2011-03-02T15:30:18-08:00 2011-03-02T14:15:04-08:00 false 

你的时间戳应该是字符串。

 var d1 = "2011-03-02T15:30:18-08:00"; var d2 = "2011-03-02T15:36:05-08:00"; if (new Date(d1) < new Date(d2)) {alert('newer')} 

示例: http //jsfiddle.net/hKPkF/

您可能遇到日期字符串格式问题。 如果我这样做,我将收到无效日期:

 new Date("2011-03-02T15:30:18-08:00"); 

以下是适用于Chrome的内容:

 var d1 = "Thu Mar 03 2011 00:53:54 GMT+0100 (CET)"; var d2 = "Thu Mar 03 2011 03:53:54 GMT+0100 (CET)"; if (new Date(d1) < new Date(d2)) {console.log('newer')} 

如果您在服务器端使用ruby,则可以从Time对象转换为UTC。 在这里,通过一些按摩来转换为与javascript的Date对象toUTCString方法相同的格式:

 tm = Time.new utc_tm = tm.getutc utc_tm.strftime("%a, %d %b %Y %H:%M:%S GMT") 

输出: "Thu, 03 Mar 2011 00:46:55 GMT"

似乎对我来说工作正常,虽然您必须正确格式化(即分号,引号):

 var d1 = "2011-03-02T15:30:18-08:00"; var d2 = "2011-03-02T15:36:05-08:00"; if(new Date(d1) < new Date(d2)) {alert('newer')}; 

是的,需要时间考虑。 如果你这样做:

 alert(new Date(d1) - new Date(d2)); 

你得到347000,这是347秒,或5分47秒。 这是两者之间的正确差异。

var d1 =’2011-03-02T15:30:18-08:00’,d2 =’2011-03-02T15:36:05-08:00′; 某些浏览器可以使用新的Date或Date.parse将ISO字符串转换为Date。

今天使用的很多浏览器都不能 – 您可能需要编写自己的转换。

这个似乎有效,但它需要精炼。 我为没有array.map的浏览器添加了一个垫片,基于mozilla org的公共代码。

 Date.fromISO= function(s){ var day, tz, rx= /^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/, p= rx.exec(s) || []; if(p[1]){ day= p[1].split(/\D/).map(function(itm){ return parseInt(itm, 10) || 0; }); day[1]-= 1; day= new Date(Date.UTC.apply(Date, day)); if(!day.getDate()) return NaN; if(p[5]){ tz= parseInt(p[5], 10)*60; if(p[6]) tz += parseInt(p[6], 10); if(p[4]== "+") tz*= -1; if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz); } return day; } return NaN; } Array.prototype.map= Array.prototype.map || function(fun, scope){ var L= this.length, A= [], i= 0; if(typeof fun== 'function'){ while(i< L){ if(i in this) A[i]= fun.call(scope, this[i], i, this); ++i; } return A; } } var d1= '2011-03-02T15:30:18-08:00', d2= '2011-03-02T15:36:05-08:00'; alert(Date.fromISO(d1)-Date.fromISO(d2)+' milliseconds') 

鉴于浏览器之间的日期格式和function的差异,我真的建议您使用专用于DateTime处理的库。 JS对它的支持是出了名的骇人听闻。 我是date.js的巨大粉丝

http://www.datejs.com/