添加持续时间到片刻(moment.js)

Pau*_*l H 126 javascript momentjs

瞬间版本: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]…}
Run Code Online (Sandbox Code Playgroud)

这是一个微不足道的例子,但我甚至无法让它发挥作用.我觉得我在这里错过了一些大事,但我真的不明白.即便如此,这似乎也不起作用:

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]…}
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

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

正如您所看到的,当我解决此问题时,我正在使用虚拟x值.

Mat*_*int 244

我想你错过了文档中的一个关键点 .add()

通过增加时间来改变原始时刻.

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

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

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

此外,你不能只是==用来测试.您可以将每个时刻格式化为相同的输出并进行比较,或者您可以使用该.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
Run Code Online (Sandbox Code Playgroud)

  • 确保调用其中一种显示方法,例如`.format()`或`.toDate()`或`.unix()`.只是看着原始时刻不会很好.您可能还想要执行类似`yourmoment.utc().format()`的操作,将其格式化为utc而不是本地时间. (13认同)
  • 是的,忘记这些时刻不是一成不变的.太好了! (3认同)

Mah*_*wal 23

我正在开发一个跟踪实时路线的应用程序.乘客想要显示驾驶员的当前位置以及到达他/她位置的预计到达时间.所以我需要在当前时间添加一些持续时间.

所以我发现下面提到的方法也是如此.我们可以在当前时间添加任何持续时间(小时,分钟和秒):

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, 'minutes').format('hh:mm A');// it will add 11 mins in the current time and will give time in 03:35 PM format; can use m or minutes 

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
Run Code Online (Sandbox Code Playgroud)

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

  • 应该是'分钟'而不是'分钟'. (9认同)
  • 应该是“分钟”而不是“分钟”。或者至少可以是“ m”。请更新您的答案! (2认同)

Mad*_*oon 10

对于拥有startTime(如 12h:30:30) 和duration(以分钟为单位的值,如 120) 的人,您可以猜测endTime如下:

const startTime = '12:30:00';
const durationInMinutes = '120';

const endTime = moment(startTime, 'HH:mm:ss').add(durationInMinutes, 'minutes').format('HH:mm');

// endTime is equal to "14:30"
Run Code Online (Sandbox Code Playgroud)