必须使用 moment.js
检查项目集合是否包含已超过 3、6 个月等的开始日期,但遇到问题一种计算今天和开始日期之间的时间差的方法,正在考虑查看是否 (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 < 3,您将得到 0。如果 3 <= diff <6 个月,您将得到 1,依此类推。
例如
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>
关于javascript - 检查集合中的日期是否为 3、6 或 9 个月(依此类推)前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57458703/