假设我有一个由字符串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
}
答案 0 :(得分:6)
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');
}
})()