繁体   English   中英

检查集合中的日期是3个月,6个月还是9个月(依此类推)

[英]Check if a date from a collection is 3, 6, or 9 months (and so on) ago

必须使用moment.js检查项目集合是否包含已通过3、6等个月的startDate,但是在想出一种方法来计算今天与startDate之间的时间差时遇到了问题if (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> 

模对我来说很有意义。 如果滚动自己的日期,它的工作原理如下(加上或减去一个leap日),这就是诸如moment.js之类的库很擅长抽象的东西:

 const projects = [ { id: 1, startDate: 1551441600000 }, { id: 2, startDate: 1554120000000 }, { id: 3, startDate: 1556712000000 }, { id: 4, startDate: 1559390400000 }, { id: 5, startDate: 1564660800000 } ]; // Gets current year, month, and date const now = new Date(), thisYear = now.getFullYear(), thisMonth = now.getUTCMonth(), thisDate = now.getUTCDate(); // Loops through projects projects.forEach(project => { // Gets year, month, and date for each project const then = new Date(project.startDate), startYear = then.getFullYear(), startMonth = then.getUTCMonth(), startDate = then.getUTCDate(); //console.log(then.toUTCString()); // Reports on the project if it started on an earlier day of the month 3, 6, etc months ago const justStarted = thisYear == startYear && thisMonth == startMonth, isQuarterInterval = thisMonth % 3 == startMonth % 3 && thisDate >= startDate if(isQuarterInterval && !justStarted){ console.log("Project #" + project.id + " started " + then); } }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM