我尝试使用MomentJS为我的音乐构建一个进度条。
我的最后更新时间如下:" 2017-09-21T18:20:11.2734588 + 02:00"
我还剩下几秒钟:120
我尝试将120秒添加到上次更新时间并计算上次更新+ 120和现在之间的差异。
我试过了:
[SPTAuth defaultInstance].tokenSwapURL = [NSURL URLWithString:@"swapURL"];
[SPTAuth defaultInstance].tokenRefreshURL = [NSURL URLWithString:@"refreshURL"];
但结束时间与开始时间完全相同。如果我现在增加120秒,它才有效。
我猜它可能与格式有关,但我找不到。
也许有人可以帮助我?
感谢
编辑:
以上代码的结果:
答案 0 :(得分:0)
您必须使用format()
(或.toString()
或.toISOString()
)来显示时刻对象的值。
作为一般用途,请勿使用Internal properties(前缀为_
)
最常见的内部属性是
_d
属性,它包含Moment包装器的JavaScript日期。通常,开发人员对控制台输出_d
的值感到困惑。 Moment使用一种称为epoch移位的技术,该技术有时会使该属性与Moment反映的实际日期值不同。特别是如果正在使用Moment TimeZone,则此属性几乎不会与Moment从其公共.format()
函数输出的实际值相同。因此,_d
和任何其他以_
为前缀的属性的值不应用于任何目的。要打印出片刻的价值,请使用
.format()
,.toString()
或.toISOString()
。
您的代码很好,您只是以错误的方式记录时刻对象:
var stateobject = {
LastUpdate: '2017-09-21T18:20:11.2734588+02:00',
Value: { data: {
remaining: 120
}}
};
var start = moment(stateobject.LastUpdate);
var now = moment();
var end = moment(start).add(stateobject.Value.data.remaining,'seconds');
console.log(start.format('HH:mm:ss'));
console.log(end.format('HH:mm:ss'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>