javascript中的日期时间,这是一个错误吗?

时间:2011-07-07 00:14:52

标签: javascript

大家好,所有javascript大师,

我遇到过这个javascript代码让我难以理解为什么它没有按预期工作。所以我想在这里发帖寻求你的帮助。

基本上代码是将Date转换为毫秒格式,然后将该毫秒值再次转换回Date对象,但在比较时,它们不相等?

var currentTime = new Date();
var currentTimeInMill = Date.parse(currentTime);
var currentTime2 = new Date(currentTimeInMill);

// debug in firefox
console.log(currentTime);
// Date {Thu Jul 07 2011 09:56:19 GMT+1000 (AUS Eastern Standard Time)}

console.log(currentTime2);
// Date {Thu Jul 07 2011 09:56:19 GMT+1000 (AUS Eastern Standard Time)}

console.log(currentTime == currentTime2);
// false

我的问题是为什么2值currentTime和currentTime2不相等,即使它们的值在Firefox console.log中“看起来”相同?

4 个答案:

答案 0 :(得分:3)

这是因为时间字符串不是往返的。如果你试试这个:

var currentTime = new Date();
var currentTimeInMill = Date.parse(currentTime);
var currentTime2 = new Date(currentTimeInMill);

console.log(currentTime.getTime());

console.log(currentTime2.getTime());

console.log(currentTime == currentTime2);
// false

你会看到时代不同。 currentTime2以3个零结尾,而currentTime则有其他内容。这是一个微小的差异,以毫秒为单位,字符串显然不包括。

答案 1 :(得分:3)

除非他们引用 完全相同的对象 ,否则您不会使用==让JavaScript中的两个“对象”相等。 Javascript相等性检查它们是否在检查相同的对象之前是否引用相同的对象。

简单地说,比较对象=====

相同

您的支票应该是:

currentTime.getTime() == currentTime2.getTime();
// or
+currentTime == +currentTime2; // cast both to numbers and compare the numbers

答案 2 :(得分:1)

因为,正如minitech指出的那样,从Date对象的toString方法中剥离毫秒,以便绝对确保currentTime的数值等于currentTime2的数值,我需要设置currentTime2

的毫秒数
currentTime2.setMilliseconds(currentTime % 1000);

然后,正如cwolves指出的那样,您可以比较每个Date的{​​{1}}输出。所以完成后,它看起来像这样:

getTime

答案 3 :(得分:0)

currentTime-currentTime2 === 0是测试两个日期引用相同时间戳的快速方法。