获取 Moment Js 中两个日期之间的时差

IT技术 javascript date momentjs
2021-01-18 23:39:39

我可以使用 MomentJs 获得两个日期之间的差异,如下所示:

moment(end.diff(startTime)).format("m[m] s[s]")

但是,我还想在适用时显示小时(仅当 >= 60 分钟过去时)。

但是,当我尝试使用以下方法检索持续时间时:

var duration = moment.duration(end.diff(startTime));
var hours = duration.hours();

它返回当前小时而不是两个日期之间的小时数。

我如何获得两个时刻之间的小时差?

6个回答

你很接近。您只需要使用该duration.asHours()方法(请参阅文档)。

var duration = moment.duration(end.diff(startTime));
var hours = duration.asHours();
@GregL 我已经纠正了jsfiddle.net/qxxr1Lyr我一定是在.hours()没有注意到的情况下错误地使用了该方法。
2021-03-15 23:39:39
@zanderwar 我理解你的沮丧,但这是一个 5 年前的问题。今天这样的问题和答案不会飞。
2021-03-16 23:39:39
@integraterend在你的代码中是一个 Moment 实例吗?尝试将其包裹以moment()进行转换。.diff()是 MomentJS 方法,仅适用于 Moment 对象,不适用于原生 JS Date 对象。
2021-03-18 23:39:39
不应该startTime.diff(end, 'hours', true);吗?持续时间.asHours(); 如果是 25 小时前,则返回 1。
2021-03-27 23:39:39
@DanielF 如果您使用的是 MomentJS >= 2.0.0 版,则可以使用.diff(),是的。除了将end.diff(startTime, 'hours', true)小时数作为正数。但是,您的第二点不正确。duration.hours()如果是 25 小时前,则返回 1,但duration.asHours()会返回 25。
2021-03-31 23:39:39

以下代码块显示了如何使用 MomentJS 计算两个日期之间的天数差异。

var now = moment(new Date()); //todays date
var end = moment("2015-12-1"); // another date
var duration = moment.duration(now.diff(end));
var days = duration.asDays();
console.log(days)
至少他的代码块显示了与接受的答案或问题不同的所有正在使用的变量。如果有人想否决他们,应该否决这个问题,因为它是一个不完整的代码块。那个代码块真的需要解释吗?
2021-03-21 23:39:39
现在通过var now = moment();. 参见momentjs.com/docs/#/parsing/now
2021-04-05 23:39:39
这个答案对我来说足够清楚,甚至比上面接受的答案更完整,你不知道“结束”和“开始时间”来自哪里......非常感谢你的回答拉吉!
2021-04-09 23:39:39

或者你可以简单地做:

var a = moment('2016-06-06T21:03:55');//now
var b = moment('2016-05-06T20:03:55');

console.log(a.diff(b, 'minutes')) // 44700
console.log(a.diff(b, 'hours')) // 745
console.log(a.diff(b, 'days')) // 31
console.log(a.diff(b, 'weeks')) // 4

文档:这里

@FaizanSaiyed,我知道已经晚了,但是,这是怎么做的- var a = moment('2016-06-06T22:34:56'); var b = moment('2016-06-06T21:03:55'); var diff_s = a.diff(b, 'seconds'); console.log(moment.utc(moment.duration(diff_s, "seconds").asMilliseconds()).format("hh:mm:ss"))
2021-03-18 23:39:39
@FaizanSaiyed,感谢您提供正确的解决方案。
2021-03-20 23:39:39
如何同时显示所有小时、分钟和秒?喜欢 HH:MM:SS 吗?
2021-03-25 23:39:39

有一个很好的moment方法被调用fromNow(),它将以人类可读的形式返回特定时间的时间,如下所示:

moment('2019-04-30T07:30:53.000Z').fromNow() // an hour ago || a day ago || 10 days ago

或者,如果您希望在两个特定日期之间使用,则可以使用:

var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.from(b); // "a day ago"

取自文档:

这对我来说是最好的方法,因为我不需要自己计算小时/天/月/年前字符串,它只是一行!谢谢!!
2021-03-14 23:39:39
您还可以将布尔值传递给from/fromNow以从中删除前缀。默认情况下,它会像in 5 minutes. 使用 boolean ( a.from(b, true)) 你只能得到5 minutes.
2021-04-09 23:39:39

您需要做的就是hours作为第二个参数传入moment diff 函数。

var a = moment([21,30,00], "HH:mm:ss")
var b = moment([09,30,00], "HH:mm:ss")
a.diff(b, 'hours') // 12

文档: https : //momentjs.com/docs/#/displaying/difference/

例子:

const dateFormat = "YYYY-MM-DD HH:mm:ss";
// Get your start and end date/times
const rightNow = moment().format(dateFormat);
const thisTimeYesterday = moment().subtract(1, 'days').format(dateFormat);
// pass in hours as the second parameter to the diff function
const differenceInHours = moment(rightNow).diff(thisTimeYesterday, 'hours');

console.log(`${differenceInHours} hours have passed since this time yesterday`);
<script 
  src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js">
</script>