必须使用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>

10-06 00:48
查看更多