【问题标题】:MomentJs get "time until" with two variablesMomentJs 使用两个变量获得“时间到”
【发布时间】:2017-02-03 19:12:55
【问题描述】:

我正在尝试让 moment.js 向我显示直到特定日期的时间。我已经这样做了:

let date = 2017-03-27T12:00:00;
moment().to(date);

这显示:“in 10 days”。

我真的很想显示“in 10 days and 2 hours”或两个最高值。例如,1 year and 5 months4 minutes and 30 seconds

有没有简单的方法来做到这一点?我目前正在研究一种复杂的方法来处理这个......

let years = moment(date).local().diff(moment(), 'years');
let months = (moment(date).local().diff(moment(), 'months'));
let days = (moment(date).local().diff(moment(), 'days'));
let hours = (moment(date).local().diff(moment(), 'hours'));
let minutes = (moment(date).local().diff(moment(), 'minutes'));
let seconds = (moment(date).local().diff(moment(), 'seconds'));

//The above values return total number each, 
//For example, this could show 1 year, 14 months, 435 days, etc.
//The math below is supposed to make this say
//1 year, 2 months, 14 days, etc.

let yearsRemain = years;
let monthsRemain = months - (years *12);
let daysRemain = days - (Math.floor(months * 30));
let hoursRemain = hours - (days * 24);
let minutesRemain = minutes - (hours * 60);
let secondsRemain = seconds - (minutes * 60);

var dateArray = [
  yearsRemain,
  monthsRemain,
  daysRemain,
  hoursRemain,
  minutesRemain,
  secondsRemain
]

console.log(dateArray);

/*

returns [1, 1, 3, 23, 16, 46] for example

*/

问题在于,当涉及到几天时。由于一年中的天数和一个月中的天数不同,我希望 moment.js 能帮助我。有更好的方法吗?

最终,我将能够遍历数组并找到两个最大值来显示我想要的方式。

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    您可以使用moment.duration 来计算dateArray 的值。持续时间有years()months()days()hours()minutes()seconds() getters。

    这里是一个活生生的例子:

    let date = '2017-03-27T12:00:00';
    var dur = moment.duration( moment(date).diff(moment()) );
    
    let yearsRemain = dur.years();
    let monthsRemain = dur.months();
    let daysRemain = dur.days();
    let hoursRemain = dur.hours();
    let minutesRemain = dur.minutes();
    let secondsRemain = dur.seconds();
    
    var dateArray = [
      yearsRemain,
      monthsRemain,
      daysRemain,
      hoursRemain,
      minutesRemain,
      secondsRemain
    ]
    
    console.log(dateArray);
    <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

    您可以使用moment-duration-format 插件以自定义格式显示持续时间。该插件有一个template 选项,可让您自定义格式。

    let date = '2017-03-27T12:00:00';
    let dur = moment.duration( moment(date).diff(moment()) );
    console.log( dur.format() );
    console.log( dur.format('M [months and] d [days]') );
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

    请注意,moments 有 relativeTimerelativeTimeRoundingrelativeTimeThreshold,可让您自定义 moment 显示相对时间的方式(因此您可以更改 to 输出)。

    【讨论】:

    • 谢谢,我在 ionic 2 中使用 typescript 进行技术性工作。一旦我知道如何将 moment-duration-format 导入到我的项目中,我会尝试一下。谢谢!
    • 你的第一段代码就像一个魅力。你让我意识到我应该在 1 个持续时间内工作,而不是几个。谢谢!
    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2019-07-17
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多