在JS中添加/减去时间

时间:2013-04-30 09:00:58

标签: javascript date time

最近我在玩JS,我发现了一些有趣的东西。这就是我写入chrome控制台的内容:

today = new Date()
-> Mon Apr 29 2013 13:06:01 GMT+0200 (CEST)
DAY = 1000 * 3600 * 24
-> 86400000
today - 2 * DAY
-> 1367060761452
today + 2 * DAY
-> "Mon Apr 29 2013 13:06:01 GMT+0200 (CEST)172800000"

我想知道为什么我会根据操作类型 - 加/减来得到不同类型的答案。当我做那样的事情时:

today - (-2) * DAY
一切都很好。是否有任何意识形态,或者它是一个错误?

4 个答案:

答案 0 :(得分:3)

今天+ 2 *天 使用串联串联。如果你想正确地做,请使用today.getTime()。

示例:

tomorrow = new Date()
tomorrow.setTime(today.getTime() + DAY)

答案 1 :(得分:2)

对于-,这是减号运算符,使用日期对象的.valueOf方法。

对于+,首先将其视为字符串连接。

today - 2 * DAY被视为today.valueOf() - 2 * DAY

today + 2 * DAY被视为today.toString() + 2 * DAY

因此,如果您想在日期对象上使用数学运算,请使用today.getTime()而不只是today

答案 2 :(得分:2)

在规范中找到这个有点棘手,因为它与其他Date内容不同。

如果您查看section 11.6.1,“添加运算符”,您会找到以下注释:

  

注1:在步骤5和6中对ToPrimitive的调用中没有提供提示。除Date对象之外的所有本机ECMAScript对象都处理没有提示,就像提供了提示号一样;日期对象处理缺少提示,就像提供了提示字符串一样。主机对象可以通过其他方式处理缺少提示。

在上下文中,这意味着对Date对象使用加法运算符(+)将使用字符串值而不是数值。从这个意义上说,Date对象是特殊的,不同于任何其他类型的对象。

请注意,减法运算符没有这样的例外,因为它是明确的 - 它只适用于数字减法;它不能在字符串上运行。

另请注意,这适用于加法运算符,+,两边都有操作数。一元“plus”运算符不会像这样工作,因此左侧没有任何内容的+myDateObj将导致数值。

答案 3 :(得分:0)

我认为像这样添加和减去日期到javascript日期

var today= new Date();
var addDay=30;
today.setDate(today.getDate()+addDay);

现在今天指向今天的第30个日期