如何用Moment.js计算日期差值,转总分钟数及天时分格式
解决Moment.js计算日期差的总分钟数与天时分格式问题
嘿,我来帮你搞定这个日期差计算的问题!你的思路是对的,用moment.duration()处理两个日期的差值就很合适,下面我帮你完善代码,实现你要的两个需求:
1. 获取总分钟数
Moment.js的Duration对象自带asMinutes()方法,直接调用就能得到两个日期之间的总分钟数,不用自己手动换算:
var now = moment('2018-03-28 14:02'); var end = moment('2018-06-02 00:00'); var duration = moment.duration(end.diff(now)); // 获取总分钟数 var totalMinutes = duration.asMinutes(); console.log(totalMinutes); // 输出:157038(准确的总分钟数)
2. 转换为“X天X时X分”格式
你之前用asDays()得到的是带小数的天数,其实完全不用手动拆分小数部分——Duration对象提供了days()、hours()、minutes()三个方法,它们会直接返回对应单位的整数数值(自动处理了进位逻辑,比如超过60分钟会转成小时,超过24小时转成天):
var now = moment('2018-03-28 14:02'); var end = moment('2018-06-02 00:00'); var duration = moment.duration(end.diff(now)); // 分别提取天、小时、分钟的整数部分 var days = duration.days(); var hours = duration.hours(); var minutes = duration.minutes(); // 拼接成目标格式 var formattedDuration = `${days}天${hours}时${minutes}分`; console.log(formattedDuration); // 输出:65天9时58分
这里补充说明下:duration.days()得到的是扣除整月/整年之后的剩余天数(你的例子里日期差不到一个月,所以就是准确的65天),hours()和minutes()则是剩下的不足一天的小时和分钟数,刚好匹配你要的格式需求。
内容的提问来源于stack exchange,提问作者Arter




