小编典典

如何计算今天前三个月的 JavaScript 日期?

all

我正在尝试形成一个比当前日期早 3 个月的日期。我通过以下代码获取当前月份

var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;

Date考虑到当月份是 1 月(1),日期前 3 个月是 10 月(10)时,你们能给我提供计算和形成日期(数据类型的对象)的逻辑吗?


阅读 69

收藏
2022-06-30

共1个答案

小编典典

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 :

“3 月 31 日之前的一个月”的 Google 搜索结果显示“3 月 3 日”

它还说一个月是 30.4167 天
谷歌搜索“一天中一个月”的结果显示“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());

如果您的要求比这更复杂,请使用一些数学并编写一些代码。你是开发者!您不必安装库!您不必从 stackoverflow
复制和粘贴!您可以自己开发代码来精确地完成您需要的工作!

2022-06-30