以UTC

时间:2017-05-31 06:54:05

标签: javascript datetime momentjs duration

我很难计算两个时间戳的持续时间(时间差)。 我从服务器收到的时间戳格式如下:

start # => "2017-05-31 06:30:10 UTC" (这基本上是rubys DateTime.now.utc

我想看看从那时起到现在为止已经过了多少小时。 计算仅在angularjs前端发生。 我尝试了以下方法:

var start = moment("2017-05-31 06:30:10 UTC", "YYYY-MM-DD HH:mm:ss Z").utc();
var now = moment.utc();
var duration = moment.duration(now.diff(start));
console.log(duration.asHours()); #=> 2 hours even though the point in time was just a couple of minutes ago.

不幸的是,这将始终使用我的设备当地时间,并产生一个比实际时间短几个小时的时间。

所以我的方法是将所有时间转换为UTC并让momentjs处理所有这些。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

由于您输入的是UTC,因此可以使用moment.utc方法。

  

默认情况下,时刻会以当地时间进行分析和显示。

     

如果您想以UTC格式解析或显示片刻,可以使用moment.utc()代替moment()

这是一个实例:

var start = moment.utc("2017-05-31 06:30:10 UTC", "YYYY-MM-DD HH:mm:ss Z");
var now = moment.utc();
var duration = moment.duration(now.diff(start));
console.log(duration.asHours());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

在您的代码示例中,您将输入字符串解析为本地日期,然后将其转换为UTC(使用utc()方法)。

请参阅Local vs UTC vs Offset指南以获取更多信息。