【问题标题】:Update a moment.js duration更新 moment.js 持续时间
【发布时间】:2016-02-23 15:33:36
【问题描述】:

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

例如,创造时刻:

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;

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

【问题讨论】:

  • 我可能误解了你的问题。如果我这样做了,请告诉我,以便我更好地理解您的问题并更新答案

标签: javascript datetime time momentjs


【解决方案1】:

查看 momentjs API(和代码),时间单位(小时、分钟、秒等)的持续时间对象上似乎没有 setter 方法。所有 momentjs 为这些时间单位提供的都是 getter。因此,一个很好的方法是您在问题本身中执行此操作的方式,使用现有值中的值创建一个新的持续时间对象。

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

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

更新底层的_data 属性似乎更新了特定的时间单位,但它并没有更新持续时间对象本身。所以其他的方法,比如humanize,并没有为我们提供更新的值。

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

【讨论】:

  • 感谢您的回答,但这并不是我想要的。我已将问题更新为更清晰一些。
  • @MattO'Keefe 我根据更新后的问题更新了我的答案。希望它有所帮助:)
  • 谢谢 satish,我想我只能这样了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多