【问题标题】:Get the days, hours and minutes in Moment.js在 Moment.js 中获取日期、小时和分钟
【发布时间】:2017-01-26 14:26:24
【问题描述】:

所以这是我第一次使用 Moment.js,我遇到了以下问题,所以我有以下日期:

now: 2017-01-26T14:21:22+0000
expiration: 2017-01-29T17:24:22+0000

我想得到的是:

Day: 3
Hours: 3
Mins: 3

我尝试了以下代码:

const now = moment();
const exp = moment(expire_date);
console.log(expire_date);
days = exp.diff(now, 'days');
hours = exp.diff(now, 'hours') - (days * 24);
minutes = exp.diff(now, 'minutes') - ((days * 1440) + (hours * 24) * 60);

我知道我做错了什么(可能是我的计算或我使用了错误的方法),但我不知道是什么。

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    MomentJS 可以为你计算所有这些,而无需你做任何逻辑。

    • 先找出两个矩之间的差异
    • 将其表示为持续时间
    • 然后显示您想要的持续时间的任何组件.days()、.hours()。

    注意:您也可以根据需要表达整个持续时间.asDays()、.asHours() 等。

    const now = moment("2017-01-26T14:21:22+0000");
    const expiration = moment("2017-01-29T17:24:22+0000");
    
    // get the difference between the moments
    const diff = expiration.diff(now);
    
    //express as a duration
    const diffDuration = moment.duration(diff);
    
    // display
    console.log("Days:", diffDuration.days());
    console.log("Hours:", diffDuration.hours());
    console.log("Minutes:", diffDuration.minutes());
    <script src="https://momentjs.com/downloads/moment.js"></script>

    【讨论】:

    • 如果间隔大于一个月,此解决方案将不会显示正确的天数。使用几天:console.log("Days:", expiration.diff(now, "days"));
    【解决方案2】:

    这将为您提供正确的值并消除手动计算的麻烦

    let expiration = "2017-01-29T17:24:22+0000"
    const now = moment();
    const exp = moment(expiration);
    
    console.log(exp.format());
    
    days = exp.diff(now, 'days');
    hours = exp.subtract(days, 'days').diff(now, 'hours');
    minutes = exp.subtract(hours, 'hours').diff(now, 'minutes');
    
    console.log(days, hours, minutes)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

    请注意,substract 操作将改变原始的 exp 值,所以不要期望它是原始日期而传递它

    【讨论】:

      【解决方案3】:

      试试我的解决方案。我想就是这样:

        var now = moment("2017-01-26T14:21:22+0000");
        var expiration = moment("2017-01-29T17:24:22+0000");
        var minsAverage = expiration.diff(now, "minutes");
      
        var min = parseInt(minsAverage % 60);
        var hours = parseInt(minsAverage / 60);
        var days = parseInt(hours / 24);
        hours = hours - 24*days;
      

      【讨论】:

        【解决方案4】:

        有关更多信息,请查看文档https://momentjs.com/docs/#/displaying/difference/

        var now = moment()
        var exp = moment().add(1,'days')
        var days = exp.diff(now, 'days')
        var months = exp.diff(now, 'months')
        var years = exp.diff(now, 'years', true) //float number
        
        console.log(now,exp,days, months, years)
        <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-13
          • 2014-10-17
          • 1970-01-01
          • 1970-01-01
          • 2019-12-22
          • 1970-01-01
          • 2016-04-26
          相关资源
          最近更新 更多