必须使用moment.js
检查项目集合中是否包含已过去3、6等个月的startDate,但是在想出一种方法来计算今天与startDate之间的时间差时遇到了问题如果是(today / startDate) % 3 === 0
,但我认为这不是最好的方法,并且结果不符合预期。即使使用moment.js
diff,这样也不会产生预期的结果,并且记录显然还没有经过3、6等个月的项目。
显然我想念一些东西,希望能有所帮助,谢谢。
const today = moment()
const projects = await ProjectModel.find()
projects.forEach(project => {
if (today.diff(moment(project.startDate), "month") % 3 == 0) {
console.log(project)
}
})
最佳答案
%是错误的解决方法。您想找到日期所属的3个月前的括号,因此得到月份的差值并除以3并取下结果。如果diff
例如。
let projects = [
{startDate: new Date(2017,10,1)}, // 1 Nov 2017
{startDate: new Date(2018,10,1)}, // 1 Nov 2018
{startDate: new Date(2019, 0,1)}, // 1 Jan 2019
{startDate: new Date(2019, 3,1)}, // 1 Apr 2019
{startDate: new Date(2019, 4,1)}, // 1 May 2019
{startDate: new Date(2019, 6,1)}, // 1 Jul 2019
{startDate: new Date(2019, 7,1)} // 1 Aug 2019
];
let today = moment();
projects.forEach(project => {
let diff = today.diff(moment(project.startDate), "month") / 3 | 0;
console.log(
moment(project.startDate).format('DD-MMM-YYYY') +
' was ' + (diff * 3) + ' to ' +
(++diff * 3) + ' months ago'
);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>