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个月 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
从 Timestamp php 中减去 6 个月的最简单方法是啥