Javascript 从日期开始减去增加1个月 [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript 从日期开始减去增加1个月 [重复]相关的知识,希望对你有一定的参考价值。

我试图找到一个方法,从一个javascript日期对象中可靠地减去一个月。

我有这样一段代码。

    var shippedDate = new Date('12/31/2020');
    var tempDate = new Date(shippedDate.setMonth(shippedDate.getMonth() - 1)); //subtract 1 month
    alert(tempDate);

这段代码运行后,tempDate中的值是: 12/1/2020 而实际上 11/30/2020.

我用这个在线日期计算器检查了我的数学。https:/www.timeanddate.comdatedateadded.html?m1=12&d1=31&y1=2020&type=sub&ay=&am=1&aw=&ad=&rec=。

谢谢,我想找一个方法,从javascript日期对象中可靠地减去一个月。

答案

根据我自己的经验,我可能会对周围的一切进行限定。Date 在javascript中计算为完全无法忍受的痛苦。

尽可能的避免自己制作的函数对任何Date的操作。有太多的特点,完全不需要介意。时区,错误的时钟,你自己主机上的时区与服务器上的时区,根据本地主机的时区时钟进行意外的toString转换。

如果你真的需要计算一些日期,请使用经过实战检验的库,比如date-fns,moment.js等。

顺便说一下,你的例子几乎是正确的,你只是选择了不合适的时间来测试它。唯一一个我认为有问题的是使用了 setMonth 变异的 shippedDate.

另一答案

12月有31天,所以当你减去1个月的时候,得到的是11月31日,而11月31日并不存在,所以滚到12月1日。

你可以测试一下日期(月份中的一天)是否相同,如果不相同,就把日期设置为0,这样就会转到上个月的最后一天。

另外。setDate 修改Date对象,所以不需要创建一个新的对象。

function subtractMonth(date, months) {
  let d = date.getDate();
  date.setMonth(date.getMonth() - months);
  if (date.getDate() != d) {
    date.setDate(0);
  }
  return date;
}

let d = new Date(2020, 11, 31); // 31 Dec 2020
console.log(subtractMonth(d, 1).toString()); // 30 Nov 2020

以上是关于Javascript 从日期开始减去增加1个月 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 hive 中的日期字段中减去 n 个月

如何从现在开始使用Java减去30天,3个月和1年的时间?

从 Timestamp php 中减去 6 个月的最简单方法是啥

在Javascript中也减去日期减去月份[重复]

从日期我只想在javascript / angularjs中减去1天

从Jinja表达式中减去日期