Моментная версия: 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]…}
Любая помощь будет высоко оценена.
Edit:
Моя конечная цель - составить бинарный график состояния, такой как тот, над которым я работаю здесь:
http://bl.ocks.org/phobson/5872894
Как вы можете видеть, в настоящее время я использую фиктивные x-значения, когда я работаю над этой проблемой.
Ответ 1
Я думаю, вы пропустили ключевой момент в документации для .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
Ответ 2
Я работаю над приложением, в котором мы отслеживаем живой маршрут. Пассажир хочет показать текущую позицию водителя и ожидаемое время прибытия, чтобы добраться до его/ее местоположения. Поэтому мне нужно добавить некоторую продолжительность в текущее время.
Итак, я нашел способ, который был указан ниже, сделать то же самое.
Мы можем добавить любую продолжительность (час, минуты и секунды) в наше текущее время к моменту:
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
Это соответствует моему требованию. Может быть, это может вам помочь.