如何用moment.js获得24小时内日期之间的小时差异?

时间:2016-05-01 10:35:03

标签: javascript angularjs date time momentjs

我有一个"创建'领域的对象。以及创建对象的日期。现在我想跟踪"多少小时前"该对象是使用 moment.js 创建的。

我的目标是让时间显示如下例。

Created: 1hr ago

Created: 5hrs ago

Created: 9hrs ago

Created: 12hrs ago

Created: 14hrs ago

Created: 18hrs ago

Created: 24hrs ago

一天24小时内完成。

所以我暂时尝试了这个:

    var $created = "2016-05-01T09:58:26.796Z";
    var $now = new Date();

    var $lastCreatedHour = moment( moment( moment().format('H') ).diff( moment( $created ).format('H') ) ).format('H') + " hrs ago";

console.log("Created: " + $lastCreatedHour);

我的逻辑很简单,只是尝试区分 当前时间 $ created hour

我实际上尝试了许多不同的东西,但是他们都没有工作,或者他们是一个数字关闭或他们不会在24小时内工作,只在12小时内。

JSFIDDLE

我不是最好的日期帮助表示赞赏!

谢谢。

4 个答案:

答案 0 :(得分:2)

var $lastFeedHour = $now.diff( $created, 'hours', true)  + " hrs ago";

[https://jsfiddle.net/bjdtkfLs/]

[http://momentjs.com/docs/#/displaying/difference/]

答案 1 :(得分:1)

如果你想要的时间都是几个小时,那么stdob的回答很好。

值得注意的是,Moment内置.fromNow()。只需获取项目创建时的日期字符串,将其传递给当前构造函数,然后调用函数:

moment($created).fromNow();

作为一个实际例子:

moment("2016-05-01T09:58:26.796Z").fromNow()
"2 hours ago"

或者,更久以前:

moment("2016-04-28T09:58:26.796Z").fromNow()
"3 days ago"

此功能可以提供更多用户友好的输出,从“几秒钟前”到“x分钟前”再到“几小时前”,再到几天,几个月和几年。

fromNow的输出文本可以自定义。有关基本文档,请参阅http://momentjs.com/docs/#/displaying/fromnow/;有关自定义说明,请参阅http://momentjs.com/docs/#/customization/relative-time/

作为最终的最佳实践说明,除非您拥有需要日期的第三方API,否则永远不必使用带有Moment.js的javascript Date对象。对于你正在做的事情,不需要日期。

答案 2 :(得分:0)

如果您不需要检查日期,这可能是您的问题的答案。另外,我想说,你的功能链是没有必要的(如我已经说过的)这就是你想要实现的目标。

我的结果如下:

var $created = moment("2016-04-30T00:58:26.796Z");
var $now = moment();
var $lastFeedHour = moment($now.diff($created)).hour();

console.log("Created: " + $lastFeedHour + " hrs ago");

您也可以实时查看here

答案 3 :(得分:0)

var $created = "2016-04-30T10:58:26.796Z";
var $now = "2016-05-01T10:58:26.696Z";
var $lastFeedHour =  moment( moment().diff( moment( $created ) ) ).format('H');

console.log("Created: " + $lastFeedHour + " hrs ago");

JS Fiddle