添加一个持续时间(moment.js)

Moment版本:2.0.0

阅读文档后 ,我认为这将是直接的(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()的文档中的一个关键点

通过增加时间来改变原来的时刻。

你似乎将它视为一个返回不可变结果的函数。 容易犯错。 🙂

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

如此处所述,您可以通过克隆时刻来解决此问题 。

另外,你不能只用==来testing。 您可以将每个时刻格式化为相同的输出并进行比较,也可以使用.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 

我正在研究一个跟踪现场路线的应用程序。 乘客想要显示司机的当前位置和预计到达他/她的位置的时间。 所以我需要在当前时间里添加一些时间。

所以我find了下面提到的方法来做同样的事情。 我们可以在当前时间添加任何时间(小时,分钟和秒):

 var travelTime = moment().add(642, 'seconds').format('hh:mm A');// it will add 642 seconds in the current time and will give time in 03:35 PM format var travelTime = moment().add(11, 'mins').format('hh:mm A');// it will add 11 mins in the current time and will give time in 03:35 PM format var travelTime = moment().add(2, 'hours').format('hh:mm A');// it will add 2 hours in the current time and will give time in 03:35 PM format 

它符合我的要求。 可能是它可以帮助你。