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

Dan*_*ani 341 javascript date momentjs

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

moment(end.diff(startTime)).format("m[m] s[s]")
Run Code Online (Sandbox Code Playgroud)

但是,我也希望在适用时显示小时(仅当> = 60分钟时才显示).

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

var duration = moment.duration(end.diff(startTime));
var hours = duration.hours();
Run Code Online (Sandbox Code Playgroud)

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

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

Gre*_*egL 537

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

var duration = moment.duration(end.diff(startTime));
var hours = duration.asHours();
Run Code Online (Sandbox Code Playgroud)

  • @DanielF如果你使用MomentJS> =版本2.0.0,你可以使用`.diff()`,是的.除了它是`end.diff(startTime,'hours',true)`以将小时数作为正数.但是,你的第二点是不正确的.`duration.hours()`如果是25小时前会返回1,但`duration.asHours()`会返回25. (27认同)
  • 不应该是`startTime.diff(结束,'小时',真实);`?duration.asHours(); 如果是25小时前会返回1. (7认同)
  • @GregL我站得更正了https://jsfiddle.net/qxxr1Lyr/我一定错误地使用了`.hours()`方法而没有注意到. (5认同)
  • 当它做的全部事情就是让OP意识到大多数IDE都会向您透露的错字时,它如何获得这么多的票(https://imgur.com/a/ikyayIL)。SO代表穿着最衣冠楚楚,而其他人则从事碎屑工作。哦,你弄错了..这是4.7k rep (5认同)
  • @zanderwar我理解您的无奈,但这是一个5岁的问题。今天,这样的问题和答案将不复存在。 (2认同)
  • @integrater 你的代码中的“end”是 Moment 实例吗?尝试用“moment()”包装它来转换它。`.diff()` 是一个 MomentJS 方法,仅适用于 Moment 对象,不适用于原生 JS Date 对象。 (2认同)

sel*_*t91 190

以下代码块显示了如何使用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)
Run Code Online (Sandbox Code Playgroud)

  • 至少他的代码块显示了所使用的所有变量,与接受的答案或问题不同.如果有人想要对他们进行投票,那么就应该对这个问题进行投票,因为这是一个不完整的代码块.该代码块是否真的需要解释? (53认同)
  • 这个答案很清楚,甚至比上面接受的答案还要完整,你不知道'end'和'startTime'来自哪里......非常感谢你的答案Raj! (21认同)
  • 我同意@Pierre的评论.这是一个有用的答案,不应该被投票. (11认同)
  • 现在通过`var now = moment();`来获得一点点简单.见http://momentjs.com/docs/#/parsing/now/ (2认同)
  • 代码是自我记录的,无需任何评论.SebastiánLara的回答最适合我想要的:) (2认同)
  • 该守则发言,这个答案是有用的,不应该被投票 (2认同)

Seb*_*ara 141

或者你可以做到:

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
Run Code Online (Sandbox Code Playgroud)

docs:这里

  • @FaizanSaiyed,我知道已经晚了,但是,这是如何做的 - `var a = moment('2016-06-06T22:34:56'); var b = 时刻('2016-06-06T21:03:55'); var diff_s = a.diff(b, '秒'); console.log(moment.utc(moment.duration(diff_s, "秒").asMilliseconds()).format("hh:mm:ss"))` (7认同)
  • 如何显示所有小时,分钟和秒数?像HH:MM:SS一样? (3认同)

JSO*_*C11 15

您需要做的就是将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
Run Code Online (Sandbox Code Playgroud)

文档: 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`);
Run Code Online (Sandbox Code Playgroud)
<script 
  src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js">
</script>
Run Code Online (Sandbox Code Playgroud)


Kau*_*mar 13

你只需要使用 moment.js 中的 date.diff() 方法

const now = moment.utc();
var end = moment("2021-09-13"); 
var days = now.diff(end, "days"); 
console.log(days)
Run Code Online (Sandbox Code Playgroud)
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


Fra*_*eau 12

我知道这很旧,但这是一个单行解决方案:

const hourDiff = start.diff(end, "hours");
Run Code Online (Sandbox Code Playgroud)

其中startend是 moment 对象。

享受!


Dry*_*ams 10

有一个很棒的moment方法fromNow(),该方法将以易于理解的形式从特定时间返回时间,如下所示:

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

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

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

摘自文档: