【问题标题】:Moment.js Duration between Two DatesMoment.js 两个日期之间的持续时间
【发布时间】:2019-02-21 04:53:38
【问题描述】:

如何使用 moment.js 获取两个不同日期变量之间的时差,特别是年、月和日?

我找到了这种方法,但我不断得到奇怪的结果。有时结果提前一个月,所以我添加了一个减去一个月的部分以使结果正确,但是当两个日期之间的差异可以分为整年时,它就会落后一个月,但是如果我删除了减去月份部分,它变得更加不正常。

我也想将其格式化为“X年,Y月,Z天”,但也不知道如何以这种方式格式化。

var dateOne = new Date(2000,07,16);
var dateTwo = new Date (1990,07,16);
var updatedDate = moment(dateOne).format('ll');
   
var x = moment(dateOne, 'DD/MM/YYYY').diff(moment(dateTwo, 'DD/MM/YYYY'))
var y = moment.duration(x);
var why = moment(x).subtract(1, 'M');
var z = Math.floor(y.asYears()) + moment.utc(why).format('/MM/DD');
console.log(z);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

【问题讨论】:

  • 相关answer
  • 你在做一些奇怪的事情。一方面,日期和持续时间是完全不同的东西,您不能将持续时间格式化为日期。另一方面,这两者之间的差异正好是 10 年:moment(dateOne).diff(dateTwo, 'years', true)
  • 没有理由包含 jQuery。 dateOne 是一个 Date 对象,因此不需要 moment(dateOne, 'DD/MM/YYYY') 中的第二个参数。您可以使用 CDN 将 moment.js 作为外部库包含在内,例如https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js

标签: javascript date momentjs date-difference


【解决方案1】:

试试这个?

var firstDate = moment();
var secondDate = moment("2018-03-19");
var yearDiff = firstDate.diff(secondDate, "year");
var monthDiff = firstDate.diff(secondDate, "month");
var dayDiff = firstDate.diff(secondDate, "day");
console.log(yearDiff + " Years, " + monthDiff + " Months, " + dayDiff + " Days");

https://jsfiddle.net/px1brLdk/

【讨论】:

  • 一个好的答案应该解释为什么 OP 有问题以及您的代码如何修复它。此外,您可以将代码发布为可运行的 sn-p 并包含外部库。如果这样做,您会发现这些值是每个间隔的总差,因此在 2019 年 2 月 21 日,您将获得 0 年 11 个月 339 天。
【解决方案2】:

正如 cmets 中的其他人所说,您不能将持续时间格式化为日期,并且由于 dateOne 和 dateTwo 是 Date 对象,因此 moment(dateOne, 'DD/MM/YYYY') 中不需要第二个参数,只需使用moment(Date).

Mover,请注意当你使用new Date(year, monthIndex, day)时monthIndex从0开始,见MDN docs:

参数monthIndex 是从0 开始的。这意味着January = 0 和December = 11。

您可以根据需要使用moment-duration-format 插件来格式化momentjs 持续时间,请参阅plug-in page 上的format() 文档。

这是一个现场样本:

var dateOne = new Date(2000, 7, 16);
var dateTwo = new Date(1990, 7, 16);

var diff = moment(dateOne).diff(moment(dateTwo))
var dur = moment.duration(diff);
var result = dur.format();
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/2.2.2/moment-duration-format.min.js"></script>

【讨论】:

    【解决方案3】:

    Moment 有一个名为 .diff() 的方法,请使用该方法。 https://momentjs.com/docs/#/displaying/difference/

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 2023-03-25
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 2012-09-28
      相关资源
      最近更新 更多