Добавить длительностью в минуту (момент.js)


момент версия: 2.0.0

после прочтения документов, Я думал, что это будет прямо вперед (Chrome console):

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]…}

любая помощь была бы очень признательна.

Edit: Моя конечная цель-сделать бинарную диаграмму состояния как я работаю здесь: http://bl.ocks.org/phobson/5872894

Как вы можете видеть, в настоящее время я использую фиктивные x-значения, пока я работаю над этой проблемой.

3 87

3 ответа:

Я думаю, вы пропустили ключевой момент в документации .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

Я работаю над приложением, в котором мы отслеживаем живой маршрут. Пассажир хочет показать текущее положение водителя и ожидаемое время прибытия, чтобы добраться до его/ее местоположения. Поэтому мне нужно добавить некоторую продолжительность в текущее время.

поэтому я нашел ниже упомянутый способ сделать то же самое. Мы можем добавить любую продолжительность (час,минуты и секунды) в наше текущее время по моментам:

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

он выполняет мое требование. Может быть, это может помочь вам.

для людей, имеющих startTime (например, 12h: 30: 30) и A 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"