【问题标题】:How to check if two dates are more than 7 days apart using moment.js如何使用moment.js检查两个日期是否相隔超过7天
【发布时间】:2019-06-25 08:51:31
【问题描述】:

我正在尝试使用 moment.js 确定两个日期之间是否超过 7 天。

代码:

var start = moment(self.StartDate(), "DD/MM/YYYY");
var end = moment(self.EndDate(), "DD/MM/YYYY");

console.log(start);
console.log(end);
console.log(moment.duration(end.diff(start)).asDays());

if (moment.duration(end.diff(start)).asDays() > 7) {
    alertify.alert("Error", "Only a maximum of 7 days can be investigated.");
    return;
}

如果两个日期在同一个月内,则此方法有效。但是,如果日期跨越 2 个月,duration 将返回负值。

示例结果:

【问题讨论】:

  • end.diff(start, 'days') // 给你不同的整数
  • 您可以使用 Math.abs() 获取绝对值
  • diff() 的文档。同样来自文档,关于 diff:“如果您想要一个浮点数,请将 true 作为第三个参数传递。”
  • 我只是转换为纪元时间戳,并找到两者之间的 num 秒,然后除以得到天...jsfiddle.net/JS69L/1

标签: javascript momentjs


【解决方案1】:

使用diff 方法检查两天之间的差异,并添加days 作为第二个参数以获得天差异。

var d1 = "2019-01-10";
var d2 = "2019-01-20";
var diff = moment(d2).diff(d1, 'days')
alert('difference :' + diff)

alert('is difference more than 7: ' + (diff > 7))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

【讨论】:

    【解决方案2】:

    你可以这样做:

    const d1 = moment([2019, 6, 30]);
    const d2 = moment([2019, 6, 1]);
    const diffDays = d1.diff(d2, 'days');
    
    console.log(diffDays);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

    【讨论】:

      【解决方案3】:

      使用原生 JavaScript:

      const dayInMiliseconds = 1000 * 60 * 60 * 24;
      const self = {start: new Date(), end: new Date(new Date().setDate(new Date().getDate() + 7))}
      
      console.log(Math.round((self.end - self.start) / dayInMiliseconds))

      【讨论】:

      • 这仅在两个日期设置为大约相同的时间时才有效。例如。 2019-06-23 06:00:00 和 2019-06-23 18:00:00 之间的差异将解决为 1 天,即使差异只有 12 小时并且两个日期都在同一天。见How do I get the number of days between two dates in JavaScript?
      • 如果您希望仅在经过 24 小时后才计算一天,请使用 Math.floorinsted Math.round
      【解决方案4】:

      试试这个

      end.diff(start, "days") > 7

      文档:https://momentjs.com/docs/#/displaying/difference/

      【讨论】:

        【解决方案5】:

        https://momentjs.com/docs/#/displaying/difference/

        var a = moment([2007, 0, 29]);
        var b = moment([2007, 0, 28]);
        a.diff(b) // 86400000
        

        【讨论】:

        • 不要忘记划分一轮,从分钟中获取天数,以便它回答问题。这只是从文档中复制粘贴,没有使用 OP 的代码,也没有任何解释
        • 好的,以后会改进我的cmets,TY
        猜你喜欢
        • 2015-07-24
        • 1970-01-01
        • 2019-03-03
        • 1970-01-01
        • 2018-02-01
        • 2014-09-13
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        相关资源
        最近更新 更多