javascript - 检查集合中的日期是否为 3、6 或 9 个月(依此类推)前

标签 javascript date mongoose momentjs

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

相关文章:

javascript - 如何从 ui 和事件获取类/id

javascript - 将函数绑定(bind)到 SVG 元素

javascript - TypeScript 中类和命名空间的区别

date - BigQuery 自动检测日期格式失败

javascript - 在 for 循环中使用 Promise

javascript - 信号 R : How to send a complex object with XmppClient. 发送方法?

java - 如何根据时区的字符串值转换日期

java - 使用未正确解析的 DateFormat 将字符串解析为日期

node.js - Mongoose 具有正则表达式和限制的不同查询?

node.js - Mongoose 查询外的回调数据