moment.js日期差异格式化

17
我正在使用moment.js,并希望计算两个时间戳之间的差异,然后格式化它们并在一个div中显示。
var diffTime = moment(1390310146.791877).diff( 1390309386.271075);

这给了我760秒,但我希望将其格式化为:

(天, 小时, 分钟, 秒),如果它们大于0,只显示天数、小时和秒数。

我应该如何实现这个功能?

2个回答

32

应使用moment.duration。

   let startTime = moment('09:45:20', 'h:mm:ss A').format("HH:mm:ss");
   let endTime = moment('10:30:35', 'h:mm:ss A').format("HH:mm:ss")
   var todayDate = moment(new Date()).format("MM-DD-YYYY"); //Can change, based on the requirement
   var startDate = new Date(`${todayDate} ${startTime}`);
   var endDate = new Date(`${todayDate} ${endTime}`);
   var diffTime = moment(endDate).diff(startDate);

   var duration = moment.duration(diffTime);
   var years = duration.years(),
    days = duration.days(),
    months = duration.months(),
    hrs = duration.hours(),
    mins = duration.minutes(),
    secs = duration.seconds();

var div = document.createElement('div');
div.innerHTML = years + ' years ' + months + 'months ' + days + ' days ' + hrs + ' hrs ' + mins + ' mins ' + secs + ' sec';
document.body.appendChild(div);

jsfiddle


2
为了使其正常工作,您还需要月份。 months = duration.months() - Devin Carpenter
很好的观点。除了月份,您还需要 weeks = duration.weeks()。 否则,如果您将时间分解相加,它将无法匹配差异总数。 - Eugenio De Hoyos
我添加了月份。然而,周数并不必要,因为这段时间已经包含在天数中了。 - Marc Barbeau
dayjs是推荐使用的库,用于替代moment,但它与此答案中描述的完全相同。https://medium.com/datadriveninvestor/https-medium-com-sabesan96-why-you-should-choose-day-js-instead-of-moment-js-9cf7bb274bbd - user101289

21

试一试

var diffTime = moment(moment(1390310146.791877).diff( 1390309386.271075)).format('H m s');

它将输出 "5 30 0"。

编辑

以下是获取差异的简单方法。为此,两个时间应该处于相同的时区。

var a = moment(1390310146.791877);
var b = moment(1390309386.271075);
a.diff(b)//To get the difference in milliseconds
a.diff(b,'seconds')//To get the difference in seconds
a.diff(b,'minutes')//To get the difference in minutes 
a.zone()//Get the timezone offset in minutes

希望这有所帮助。


它应该返回约12分钟40秒。 - Newcoma
1
它取决于本地浏览器时区。 - Anto Subash
我还不确定如何获取两个时间戳之间的正确时间差? - Newcoma
如何处理浏览器时区? - Newcoma
a.diff(b) 返回 760,实际上是秒数。因此,a.diff(b,'seconds') 和 a.diff(b,'minutes') 都返回 0。 - Newcoma
我无法让它工作。我认为这个解决方案没有考虑夏令时的问题。例如:如果差异很小(通常情况下),那么我们就有了一个1970年1月没有夏令时的日期,而如果你在夏季(夏令时)进行操作,则会混淆“时区”。 - vargen_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接