8

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

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

然后我使用<and> 小于大于比较运算符来查看它是否比类似构造的Date. 使用这些运算符比较日期的算法是指定的,还是特别未指定,例如localeCompare?换句话说,这样我能保证得到一个更新的日期吗?

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

3 回答 3

8

ECMAScript 中对象的关系操作依赖于内部ToPrimitive 函数(带有提示编号),当它被定义时,您可以使用valueOf访问该函数。

尝试

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

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

这意味着通过设计,您可以确保始终让日期比较正常工作。

本文将为您提供更多详细信息toPrimitive(但与比较无关)。

于 2012-11-08T08:55:14.610 回答
1

Javascript 中的日期值是数字,如ECMA 脚本规范中所述。因此,日期值作为数字进行比较。

这是您的代码演示(我在未来设置了 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');
    }

})()​
于 2012-11-08T08:58:28.427 回答
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
于 2012-11-08T08:55:24.837 回答