我正在尝试找到一种能够可靠地从 javascript 日期对象中减去 1 个月的方法。
我有这个代码:
var shippedDate = new Date('12/31/2020');
var tempDate = new Date(shippedDate.setMonth(shippedDate.getMonth() - 1)); //subtract 1 month
alert(tempDate);
Run Code Online (Sandbox Code Playgroud)
此代码运行后 tempDate 中的值是12/1/2020
它实际应该的值11/30/2020
。
我用这个在线日期计算器检查了我的数学:https ://www.timeanddate.com/date/dateadded.html?m1=12&d1=31&y1=2020&type=sub&ay=&am=1&aw=&ad=&rec=
谢谢。
12 月有 31 天,因此当您减去 1 个月时,您会得到 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
Run Code Online (Sandbox Code Playgroud)
这有副作用,因此连续减去 2 个月可能会得到与一次性减去 2 个月不同的结果。
另外关于new Date('12/31/2020')
,请参阅为什么 Date.parse 给出不正确的结果?
我回答这个问题之前,我记得有很多关于加月份的问题也涵盖了减法。因此,我将这个问题标记为重复,而不是删除这个答案,而是将其留给后代。
如果您想对某个答案投票,请转到其中一个副本并在那里为答案投票。:-)
归档时间: |
|
查看次数: |
3908 次 |
最近记录: |