如何在今天之前的三个月用 JavaScript 计算日期?
2022-08-30 01:16:20
我正在尝试形成一个比当前日期早3个月的日期。我通过下面的代码获得当前月份
var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;
你们能否为我提供计算和形成日期(数据类型的对象)的逻辑,因为当月份为1月(1),日期前3个月将是OCtober(10)?Date
我正在尝试形成一个比当前日期早3个月的日期。我通过下面的代码获得当前月份
var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;
你们能否为我提供计算和形成日期(数据类型的对象)的逻辑,因为当月份为1月(1),日期前3个月将是OCtober(10)?Date
var d = new Date();
d.setMonth(d.getMonth() - 3);
这适用于一月份。运行此代码段:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
有一些警告...
一个月是一件奇怪的事情。您如何定义 1 个月?30天?大多数人会说,一个月前意味着上个月的同一天需要引用。但超过一半的时间,那是31天前,而不是30天前。如果今天是该月的 31 日(它不是 8 月或 12 月),则该月的那一天在上个月不存在。
有趣的是,如果你问它哪一天比另一天早一个月,谷歌同意JavaScript:
它还说一个月是30.4167天:
那么,3月31日之前的一个月是否与3月28日之前的一个月相同,提前了3天?这一切都取决于你所说的“一个月前”是什么意思。去和你的产品负责人对话吧。
如果你想像 momentjs 那样做,并通过移动到当月的最后一天来纠正这些月份的最后一天错误,你可以做这样的事情:
const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());
如果你的要求比这更复杂,请使用一些数学运算并编写一些代码。您是开发人员!您不必安装库!您不必从堆栈溢出中复制和粘贴!您可以自己开发代码,以精确地完成您需要的操作!
我建议使用一个名为Moment.js的库。
它经过了充分的测试,可以在浏览器和服务器端工作(我在Angular和Node项目中都使用它)。它对区域设置日期有很好的支持。
var threeMonthsAgo = moment().subtract(3, 'months');
console.log(threeMonthsAgo.format()); // 2015-10-13T09:37:35+02:00
.format()
返回以 ISO 8601 格式设置的日期的字符串表示形式。您也可以将其与自定义日期格式一起使用,如下所示:.format('dddd, MMMM Do YYYY, h:mm:ss a')