В JavaScript даты могут быть преобразованы в число миллисекунд с момента epoc, вызвав метод getTime()
или , просто используя дату в числовом выражении.
Итак, чтобы получить разницу, просто вычтите две даты.
Чтобы создать новую дату на основе разницы, просто укажите количество миллисекунд в конструкторе.
var oldBegin = ...
var oldEnd = ...
var newBegin = ...
var newEnd = new Date(newBegin + oldEnd - oldBegin);
Это должно просто сработать
РЕДАКТИРОВАТЬ : исправлена ошибка, указанная @ bdukes
РЕДАКТИРОВАТЬ :
Для объяснения поведения oldBegin
, oldEnd
и newBegin
являются Date
экземплярами. Вызов операторов +
и -
вызовет автоматическое приведение Javascript и автоматически вызовет метод-прототип valueOf()
этих объектов. Бывает, что метод valueOf()
реализован в объекте Date
как вызов getTime()
.
Так что в основном: date.getTime() === date.valueOf() === (0 + date) === (+date)