getMonth()减去某些东西会产生奇怪的结果

时间:2018-05-31 05:52:06

标签: javascript date

我有一个代码,我正在测试两个日期之间的差异。为了得到旧日期,我正在做以下事情

  var oldDate = new Date();
  oldDate.setMonth(oldDate.getMonth() - 5);

但是monthsOldDate正在返回别的东西,而不是五个月大的日期,为什么今天这种行为很奇怪呢?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

这是因为它是第31个。

当您使用参数setMonth()调用-2方法时,它会将日期设置为2017年11月31日。这不是实际日期,因此会转换为2017年12月1日。

有关此行为的说明,请参阅last paragraph of the Description section

答案 1 :(得分:1)

  

尝试从Javascript Date()对象添加或减去月份时   这是一个月的结束日期,JS自动提前您的日期   如果结果日期不存在,则反对下个月的第一个日期   在这个月。

我建议使用像momentjs这样的库

您可以通过

执行此操作
var monthsOldDate = moment().subtract(6, 'months');

console.log(monthsOldDate.month()) //will log 10 (November)
monthsOldDate = monthsOldDate.set("month", monthsOldDate.month())
console.log(monthsOldDate.format("Do MMMM YYYY"))  //30th November 2017