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

时间:2011-03-02 23:46:40

标签: javascript jquery

我有两个日期/时间戳:

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

5 个答案:

答案 0 :(得分:14)

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

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/

答案 1 :(得分:4)

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

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"

答案 2 :(得分:2)

似乎可以正常工作,虽然你必须正确格式化(即分号,引号):

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秒。这是两者之间的正确差异。

答案 3 :(得分:1)

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

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

这个似乎有用,但它需要精炼。我根据mozilla组织的公共代码为没有array.map的浏览器添加了一个垫片。

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')

答案 4 :(得分:1)

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

http://www.datejs.com/