Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery/JS-如何比较两个日期/时间戳?_Javascript_Jquery - Fatal编程技术网

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

Javascript jQuery/JS-如何比较两个日期/时间戳?,javascript,jquery,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')} 时间戳应该是字符串 var d1 = "2011-03-02T15:30:18-08:00"; var d2 = "2011-03-02T15:36:05-08:00"; if (new Date(d1) &l

我有两张日期/时间戳:

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

时间戳应该是字符串

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')}
var d1=“2011-03-02T15:30:18-08:00”;
var d2=“2011-03-02T15:36:05-08:00”;
如果(新日期(d1)<新日期(d2)){alert('newer')}

示例:

对我来说似乎很好,但您必须正确设置格式(即分号、引号):


你得到347000,也就是347秒,或者5分47秒。这是两者之间的正确区别。

日期字符串格式可能有问题。如果我执行以下操作,我将获得无效日期:

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

输出:
“2011年3月3日星期四00:46:55 GMT”
var d1='2011-03-02T15:30:18-08:00',d2='2011-03-02T15:36:05-08:00'; 某些浏览器可以使用新的Date或Date.parse将ISO字符串转换为日期

现在使用的很多浏览器都无法使用,您可能需要编写自己的转换

这个看起来不错,但需要改进。我根据mozilla org的公共代码为没有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')
Date.fromso=函数{
var day,tz,
rx=/^(\d{4}-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/,
p=rx.exec | |[];
if(p[1]){
day=p[1]。拆分(/\D/)。映射(函数(itm){
返回parseInt(itm,10)| 0;
});
第[1]=1天;
日期=新日期(Date.UTC.apply(Date,day));
如果(!day.getDate())返回NaN;
if(p[5]){
tz=parseInt(p[5],10)*60;
如果(p[6])tz+=parseInt(p[6],10);
如果(p[4]==“+”)tz*=-1;
if(tz)day.setUTCMinutes(day.getUTCMinutes()+tz);
}
回归日;
}
返回NaN;
}
Array.prototype.map=Array.prototype.map | |函数(fun,scope){
var L=this.length,A=[],i=0;
if(typeof fun=='function'){
而(i
考虑到不同浏览器在日期格式和功能上的差异,我建议您使用专门用于日期时间处理的库。JS对它的支持是出了名的可怕。我是date.js的超级粉丝


您是否有字符串形式的时间戳,还是实际上有“日期”实例?(我这样问是因为这些赋值语句目前是语法错误。)False是正确答案。“2011-03-02T15:30:18-08:00”不大于“2011-03-02T15:36:05-08:00”。此外,除了第一条控制台消息外,d1中的所有消息都有些奇怪。它们都以“36:515”开头@patrick我不确定这些日期是否被正确解析。我得到了2011年3月3日星期四00:30:18 GMT+0100(中欧标准时间)的第一个答案。它们是字符串,这只是在写问题时的一个错误。因此,Date不仅会比较日期,还会比较时间/秒的详细程度。/@Šime Vidas:正在为您的本地时区分析它。@Šime:也许您是对的。我没有仔细看结果。仍然相对而言,他们似乎是一致的。我只是更新了Q,请看一看,它总是返回false谢谢,但请看上面,它总是返回false。阅读我在问题中的评论。非常有趣,如果我这样做(新日期(d1)-新日期(d2))我明白了,也许我可以使用rails输出一个合适的时间戳?这似乎是问题所在,我在rails中,是否需要进行日期戳对话?尝试转换为UTC,格式如下:
Thu,2011年3月3日00:20:57 GMT
new Date("2011-03-02T15:30:18-08:00");
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')}
tm = Time.new
utc_tm = tm.getutc
utc_tm.strftime("%a, %d %b %Y %H:%M:%S GMT")
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')