为片刻添加持续时间

为片刻添加持续时间

时刻版本:2.0.0

After reading the docs ,我认为这很简单(Chrome控制台):

var timestring1 = "2013-05-09T00:00:00Z";
var timestring2 = "2013-05-09T02:00:00Z";
var startdate = moment(timestring1);
var expected_enddate = moment(timestring2);
var returned_endate = startdate.add(moment.duration(2, 'hours'));
returned_endate == expected_enddate  // false
returned_endate  // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…}

这是一个微不足道的例子,但我什至无法让它工作。我觉得我在这里错过了一些重要的东西,但我真的不明白。即使这样,这似乎也不起作用:
startdate.add(2, 'hours')
    // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…}

任何帮助将非常感激。

编辑:
我的最终目标是制作一个二进制状态图表,就像我在这里工作的那样:
http://bl.ocks.org/phobson/5872894

如您所见,我在解决此问题时目前正在使用虚拟 x 值。

最佳答案

我认为您错过了 .add() 文档中的一个关键点



您似乎将其视为返回不可变结果的函数。容易犯错。 :)

如果您使用返回值,则它与您开始使用的实际对象相同。它只是为了方便方法链接而返回。

您可以通过克隆时刻 as described here 来解决此行为。

此外,您不能仅使用 == 进行测试。您可以将每个时刻格式化为相同的输出并进行比较,或者您可以只使用 .isSame() 方法。

您的代码现在是:

var timestring1 = "2013-05-09T00:00:00Z";
var timestring2 = "2013-05-09T02:00:00Z";
var startdate = moment(timestring1);
var expected_enddate = moment(timestring2);
var returned_endate = moment(startdate).add(2, 'hours');  // see the cloning?
returned_endate.isSame(expected_enddate)  // true

关于javascript - 为片刻添加持续时间 (moment.js),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17333425/

10-13 05:55