我正在尝试形成一个比当前日期早 3 个月的日期。我通过以下代码获取当前月份
var currentDate = new Date(); var currentMonth = currentDate.getMonth()+1;
Date考虑到当月份是 1 月(1),日期前 3 个月是 10 月(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());
如果您的要求比这更复杂,请使用一些数学并编写一些代码。你是开发者!您不必安装库!您不必从 stackoverflow 复制和粘贴!您可以自己开发代码来精确地完成您需要的工作!