我很难计算两个时间戳的持续时间(时间差)。 我从服务器收到的时间戳格式如下:
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处理所有这些。
我错过了什么?
答案 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指南以获取更多信息。