如何获取上一个日期期间



我想将当前的30天期限与前一个30天期限进行比较。

const period = 30;
const today = new Date();
const startOfCurrentPeriod = new Date(new Date().setDate(today.getDate()-period));
const startOfPreviousPeriod = new Date(new Date().setDate(startOfCurrentPeriod.getDate()-period));

console.log(startOfCurrentPeriod, startOfPreviousPeriod);

我在等

2020-09-28T17:24:02.766Z
2020-08-29T17:24:02.766Z

但我得到

2020-09-28T17:24:02.766Z
2020-09-28T17:24:02.766Z

https://repl.it/repls/AptUnwittingSort

由于setDate修改日期对象:

const period = 30;
const today = new Date();
const startOfCurrentPeriod = new Date(today.setDate(today.getDate()-period));
const startOfPreviousPeriod = new Date(today.setDate(today.getDate()-period));

getDate()方法返回的是一个月的哪一天,而不是天数(就像getTime()返回的是从epoch开始的毫秒数(。假设你在11月30日,减去30天,得到10月2日,getDate()返回2。您需要将其从其他日期中减去,而不是从当前日期中减去。

const period = 30;
const today = new Date();
const startOfCurrentPeriod = new Date(new Date().setDate(today.getDate()-period));
const startOfPreviousPeriod = new Date(new Date(startOfCurrentPeriod).setDate(startOfCurrentPeriod.getDate()-period));

console.log(startOfCurrentPeriod, startOfPreviousPeriod);

由于Johnny Mopp给出了一个有效的答案,我只解释一下OP的样本中发生了什么。

const period = 30;
const today = new Date();

根据MDN web文档,setDate()将日期对象设置为当前设置的月的开始。

今天是October 28th

仍然根据MDN的webdocs,下一行在前一个月结束前两天获得日期,此处为9月,因为28 - 30 = -2(来源(,所以September 28th

new Date(new Date().setDate(today.getDate()-period));

startOfCurrentPeriodtodayDate对象的日期都是28。由于setDate()总是相对于当月初工作,因此下一行的日值也为28 - 30 = -2,因此September 28th

new Date(new Date().setDate(startOfCurrentPeriod.getDate()-period));

getTime是我实现所需结果的方法。

const period = 30;
const today = new Date();
const startOfCurrentPeriod = new Date();
startOfCurrentPeriod.setDate(today.getDate()-period);
const startOfPreviousPeriod = new Date(startOfCurrentPeriod.getTime());
startOfPreviousPeriod.setDate(startOfCurrentPeriod.getDate()-period);
console.log(startOfCurrentPeriod);
console.log(startOfPreviousPeriod);

结果是:

2020-09-28T17:44:48.507Z
2020-08-29T17:44:48.507Z

最新更新