JavaScript日期对象 - 奇怪的行为

时间:2014-08-27 00:32:25

标签: javascript

我是JavaScript新手并尝试使用NodeJS将一些服务器端代码转换为它。下面是一个片段;一般来说,它需要一个日期并从中减去2周。

任何人都可以解释下面发生的原因吗?

var currentDate = new Date('05/12/2014 14:32');
currentDate.setDate(currentDate.getDate() - 14);
console.log(typeof currentDate);
console.log(currentDate);

输出:

object
Mon Apr 28 2014 14:32:00 GMT-0500 (CDT)

现在,一切都很顺利。我已经设法减去了约会的14天。但是,它真的不再是'currentDate'所以我想把它分配给'futureDate'

var currentDate = new Date('05/12/2014 14:32');
var futureDate = currentDate.setDate(currentDate.getDate() - 14);
console.log(typeof futureDate);
console.log(futureDate);

输出:

number
1398713520000

伊克。那不好。它看起来像是从纪元以来的毫秒数或者作为数字的东西。艰难时期。但是,如果我这样做,它确实有用......

var currentDate = new Date('05/12/2014 14:32');
currentDate.setDate(currentDate.getDate() - 14);
var futureDate = currentDate;
console.log(typeof futureDate);
console.log(futureDate);

输出:

object
Mon Apr 28 2014 14:32:00 GMT-0500 (CDT)

这对我来说没有任何逻辑意义。 JavaScript伤害了我的头脑。我很感激能帮助你理解这里发生的事情。我知道我可以继续并且我的脚本可以工作,但我想了解发生了什么。

谢谢, 汤姆

1 个答案:

答案 0 :(得分:0)

现在代码中实际发生的是:

  

var futureDate = currentDate.setDate(currentDate.getDate() - 14);

您将 currentDate 的日期设置为currentDate.getDate() - 14currentDate.setDate会返回与该新日期等效的整数,并将其保存到 futureDate

您应该将其保存为日期,而不是当前的整数。

这是因为futureDate目前不是日期。 currentDate.getDate() - 14只会返回一个数字,但要将其设为日期,您应首先将futureDate初始化为日期,然后使用futureDate.setDate为其指定新的日期值。< / p>

var futureDate = new Date();
futureDate.setDate(currentDate.getDate() - 14);