Javascript / Jquery / Moment.js计算两个日期之间的天数

时间:2016-09-14 10:29:53

标签: javascript jquery momentjs

我已经用Google搜索了负载并读取了负载,到目前为止浪费了大约3个小时。我无法相信它如此艰难。

我有一个Javascript / Jquery应用程序,我安装了moment.js插件。 我正在编写POS应用程序,我需要计算两个日期之间的天数差异,因此我可以警告用户特定的退回项目可能太旧而无法返回。

我在JS中发现这个代码看起来不错,似乎是流行的方式,虽然我无法让它工作

{
  "size": 0,
  "aggs": {
    "count": {
      "nested": {
        "path": "results"
      },
      "aggs": {
        "top_reverse_nested": {
          "reverse_nested": {}
        }
      }
    }
  }
}

我也尝试使用Moment.js,这看起来非常整洁

var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var firstDate = new Date(2008,01,12);
var secondDate = new Date(2008,01,22);

var diffDays = Math.round(Math.abs((firstDate.getTime() -  secondDate.getTime())/(oneDay)));

后者将是我的首选技术。但在我的情况下,我得到错误“oDate.diff不是一个函数”,这是我的代码......

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

我怀疑问题与oDate变量的格式有关。但我无法理解为什么。

EDIT。顺便说一句,我用console.log检查了todaysDate和oDate的值,它们是  todaysDate - 2016,09,14  oDate - 2016,09,12

有什么建议吗? 干杯

4 个答案:

答案 0 :(得分:4)

在采取差异之前不要使用格式化功能。 。 .on你称之为格式,它不再是时刻的对象了。 format函数将其转换为字符串。

todaysDate = moment(new Date());
oDate = moment(result.Order.created);
var diffDays = oDate.diff(todaysDate, 'days');

答案 1 :(得分:2)

您可以将日期转换为unix时间戳(moment.unix()),减去两个时间戳并使用moment.duration()检查持续时间,这与您的第一次尝试类似

答案 2 :(得分:1)

你尝试过这样的事吗?

[Double]

在这里,我使用[CGFloat]var startDate = new Date(2008, 01, 12); var endDate = new Date(2008, 01, 22); var duration = moment.duration(endDate.diff(startDate)); var diffDays = duration.asDays(); 来获取两个日期持续时间之间的间隔,然后moment.duration()以获得天数的结果......

答案 3 :(得分:0)

你可以试试这个:

function showDays(firstDate,secondDate){



              var startDay = new Date(firstDate);
              var endDay = new Date(secondDate);
              var millisecondsPerDay = 1000 * 60 * 60 * 24;

              var millisBetween = startDay.getTime() - endDay.getTime();
              var days = millisBetween / millisecondsPerDay;

              // Round down.
              alert( Math.floor(days));

          }