JS日期比较如何工作?

时间:2012-11-08 08:45:46

标签: javascript date comparison

假设我有一个由字符串Date构造的正确"Tue Jan 12 21:33:28 +0000 2010"对象。

var dateString = "Tue Jan 12 21:33:28 +0000 2010";
var twitterDate = new Date(dateString);

然后我使用<> 小于大于比较运算符来查看它是否比类似的更近或更近构建Date。是使用指定运算符比较日期的算法,还是特别未指定,如localeCompare?换句话说,我保证会以这种方式获得更近的日期吗?

var now = new Date();
if (now < twitterDate) {
    // the date is in the future
}

3 个答案:

答案 0 :(得分:6)

ECMAScript中对象的

Relational operations依赖于内部ToPrimitive函数(带有提示号),您可以使用valueOf在定义时访问该函数。

尝试

var val = new Date().valueOf();

您将获得日期的内部值,就像在许多语言中一样,自UTC时间1970年1月1日午夜以来的毫秒数(与使用getTime()时相同)。

这意味着您可以确保始终正确地使用日期比较。

This article会为您提供有关toPrimitive的更多详细信息(但与比较无关)。

答案 1 :(得分:1)

我想是的。使用if (now < twitterDate),评估为if (now.valueOf()<twitterDate.valueOf())valueOf()提供自01/01/1970 00:00:00以来传递的毫秒数,因此这两个数字的比较是有效的。

像这样检查

var then = new Date("Tue Jan 12 21:33:28 +0000 2010")
   ,now  = new Date;

console.log(then.valueOf(),'::',now.valueOf(),'::',now<then);
  //=> 1263332008000 :: 1352365105901 :: false

答案 2 :(得分:1)

Javascript中的日期值是数字,如ECMA Script specification中所述。因此,将Date值作为数字进行比较。

这是你代码的demo(我将来会设置twitterDate)。

(function(){
    var dateString = "Tue Jan 12 21:33:28 +0000 2014";
    var twitterDate = new Date(dateString);

    var now = new Date();
    if (now < twitterDate) {
         document.write('twitterDate is in the future');
    }
    else
    {
        document.write('twitterDate is NOT in the future');
    }

})()​