2016-02-23 70 views
1

是否有可能使用标准方法更新一个moment.js持续时间而不使用add/subtract方法?更新moment.js持续时间

例如,创建时刻:

d = moment.duration({ 
    seconds: 34, 
    minutes: 55, 
    hours: 2, 
}); 

然后只更新分钟,但保持秒和小时一样吗?

我可以做这样的事情:

newD = moment.duration({ 
    seconds: value.seconds(), 
    minutes: 32, 
    hours: value.hours(), 
}); 

或工作了我是否需要加/减从原来的,然后使用:

d.subtract(23).minutes(); 

但我觉得我错过这里很明显。

而不是添加/从时刻减去,我想替换对象中的值存储中的一个作为在_data看出:

_data: [object Object] { 
    days: 0, 
    hours: 1, 
    milliseconds: 0, 
    minutes: 20, 
    months: 0, 
    seconds: 0, 
    years: 0 
}, 

即相当于:

d._data.minutes = 3; 

但它也需要更新对象的其他属性。

+0

我可能误解了你的问题。让我知道如果我这样做,以便我可以更好地理解您的问题并更新答案 – satish

回答

0

看着js API(和代码),似乎没有对时间单位(小时,分钟,秒等)的持续时间对象的setter方法。所有这些时间单位都是获得者。所以一个很好的方法就是在问题本身中这样做,使用现有值创建一个新的持续时间对象。

var d = moment.duration({ 
    seconds: 34, 
    minutes: 55, 
    hours: 2 
}); 

var newD = moment.duration({ 
    seconds: d.value(), 
    minutes: 32, 
    hours: d.value() 
}); 

更新底层_data属性似乎更新的具体时间单位,但它不更新时间对象本身。所以像人性化这样的其他方法并不能为我们提供更新的价值。

var d = moment.duration({ 
    seconds: 34, 
    minutes: 55, 
    hours: 2 
}); 

d.humanize() // '3 hours' 
d._data.hours = 5; 
d.hours() // 5 -> This is being updated 
d.humanize() // '3 hours' -> This one isn't 
+0

感谢您的回答,但它不是我所期待的。我已经更新了这个问题,以便更清楚一点。 –

+0

@ MattO'Keefe我根据更新的问题更新了我的答案。希望它有助于:) – satish

+0

感谢satish,我想我只需要这样做! –