我想将当前的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));
startOfCurrentPeriod
和today
Date对象的日期都是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