MomentJS计算和格式

时间:2017-09-21 16:28:09

标签: momentjs

我尝试使用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秒,它才有效。

我猜它可能与格式有关,但我找不到。

也许有人可以帮助我?

感谢

编辑:

以上代码的结果:

enter image description here

1 个答案:

答案 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>