【问题标题】:Get duration between two dates (Moment JS)获取两个日期之间的持续时间(Moment JS)
【发布时间】:2020-02-19 10:17:32
【问题描述】:

我有两个约会。并且需要以这种格式找到它们之间的持续时间${y}year ${w}weeks ${d}d

为此,我创建了函数。这是代码

 setTotalDuration(): void {
    const formattedFrom = moment(this.startDate).format('YYYY-MM-DD HH:mm:ss');
    const formattedTo = moment(this.endDate).format('YYYY-MM-DD HH:mm:ss');
    const duration = moment.duration(moment(formattedTo).diff(moment(formattedFrom)));
    const y = Math.floor(duration.asYears());
    const w = Math.floor(duration.asWeeks() - y * moment().weeksInYear());
    const d = Math.floor(duration.asDays() - w * 7);
    this.totalDuration = ` ${y}year ${w}weeks ${d}d`;
}

它工作不正常,现在如果我通过例如 startDate - 19/02/2020 和 endDate - 19/02/2021,我得到持续时间 - 1 年 -1 周 373 天。但我需要获得 1year 0weeks 0d

我的问题在哪里?

【问题讨论】:

  • 我认为您不需要持续时间,只需使用粒度为daydiff 函数就足够了:const dayDifference = moment(this.endDate).diff(moment(this.startDate), 'day');
  • 您也在执行冗余格式。您不需要它们来计算持续时间。
  • 我设置了一个小的 jsfiddle 来演示如何使用 diff 来达到预期的结果:jsfiddle.net/rmekv2s0
  • 366 天 -> 51.8 周,而不是 2020 年的 53 周
  • 好的,例如,如果天数是 8,它会返回 1 周 1 天吗? @nbokmans

标签: javascript typescript momentjs


【解决方案1】:

我希望这是你想要的。 您可以得到年份差异并将其添加到初始日期;然后得到以周为单位的差异,并再次将其添加到初始日期。


var moment = require("moment");

var a = moment(["2021", "02", "20"]);
var b = moment(["2020", "02", "19"]);

var years = a.diff(b, "year");
b.add(years, "years");

var weeks = a.diff(b, "week");
b.add(weeks, "weeks");

var days = a.diff(b, "days");

console.log(years + " years " + weeks + " weeks " + days + " days");


沙盒:https://codesandbox.io/s/compassionate-bas-fg1c2

【讨论】:

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