繁体   English   中英

通过 Moment.js 以小时和分钟为单位的时差

[英]Time differences in hours and minutes via Moment.js

在此处输入图像描述

我想使用 moment.js 计算 2 次之间的时间差

我一直在使用 JS 来归档它。

function timeDiffCalc(dateFuture, dateNow) {
    let diffInMilliSeconds = Math.abs(dateFuture - dateNow) / 1000;

    // console.log(dateFuture,dateNow);

    const days = Math.floor(diffInMilliSeconds / 86400);
    diffInMilliSeconds -= days * 86400;
    // console.log('calculated days', days);

    const hours = Math.floor(diffInMilliSeconds / 3600) % 24;
    diffInMilliSeconds -= hours * 3600;
    // console.log('calculated hours', hours);

    const minutes = Math.floor(diffInMilliSeconds / 60) % 60;
    diffInMilliSeconds -= minutes * 60;
    // console.log('minutes', minutes);

    let difference = '';
    if (days > 0) {
        difference += (days === 1) ? `${days} day, ` : `${days} days, `;
    }

    difference += (hours === 0 || hours === 1) ? `${hours} hour, ` : `${hours} hours, `;

    difference += (minutes === 0 || hours === 1) ? `${minutes} minutes` : `${minutes} minutes`; 

    return difference;
}

当前代码

var CurrentDate    = new Date();
var nextFeedString = '2021-03-22 18:27:08';
nextFeedString     = nextFeedString.replace(' ', 'T');
var timeLeft       = timeDiffCalc(new Date(nextFeedString), new Date());

它如上图所示,但我正在通过 moment.js 寻找更好/更短的方法。

新代码

var startTime      = moment(new Date(), "HH:mm:ss a");
var endTime        = moment(nextFeedString, "HH:mm:ss a");
var duration       = moment.duration(endTime.diff(startTime));
var hours          = parseInt(duration.asHours());
var minutes        = parseInt(duration.asMinutes())%60;
var timeLeft       = hours + ' hour and '+ minutes+' minutes.'; <<< it seems worse than what I got

我应该使用 moment.js 的更好的 function 吗?

编辑

function timeLeftFromNow(endTime) {

    var nowTime        = moment(new Date(), "HH:mm:ss a");
    var endTime        = moment(endTime, "HH:mm:ss a");
    var duration       = moment.duration(endTime.diff(nowTime));
    var hours          = parseInt(duration.asHours());
    var minutes        = parseInt(duration.asMinutes())%60;
    var timeLeft       = `${hours} hour${hours > 1 && "s"} and ${minutes} minute${minutes > 1 && "s"}`;


    return timeLeft; 

}

var nextFeedString = '{{ $nextFeed }}';
nextFeedString     = nextFeedString.replace(' ', 'T');
var timeLeft       = timeLeftFromNow(nextFeedString);

我有

在此处输入图像描述

你的时刻代码就是这样做的方法,

您可以将最后一行替换为:

const timeLeft = `${hours} hour${hours > 1 ? "s" : ""} and ${minutes} minute${minutes > 1 ? "s" : ""}.`

并用 const 替换所有 var 以更 ES6 友好!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM