Как объединить две даты в JavaScript? - PullRequest
21 голосов
/ 08 декабря 2011

У меня есть 2 объекта даты. Я хочу взять дату у одного и время у другого и объединить их в новый объект даты.

date.toString() = Wed Dec 21 2011 00:00:00 GMT+0000 (GMT)
time.toString() = Sun Dec 31 2000 03:00:00 GMT+0000 (GMT)

# I want to end up with
datetime.toString() = Wed Dec 21 2011 03:00:00 GMT+0000 (GMT)

Как мне лучше всего это сделать?

Ответы [ 7 ]

38 голосов
/ 08 декабря 2011
var datetime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 
                        time.getHours(), time.getMinutes(), time.getSeconds());
5 голосов
/ 08 декабря 2011

Как насчет этого:

var year  = date.getFullYear(),
    month = date.getMonth(),
    day   = date.getDate();

time.setFullYear(year);
time.setMonth(month);
time.setDate(day);
3 голосов
/ 08 декабря 2011
var parts = ['Hours', 'Minutes', 'Seconds', 'Milliseconds'];
for (var i=0, p; p=parts[i], i<parts.length; i++) {
  date['setUTC'+p]( time['getUTC'+p]() );
}
2 голосов
/ 08 декабря 2011

вы можете использовать строковые функции для построения целевой строки ...

datetime = date.toString().substr(0,16) + time.toString().substr(16,40)

тогда, если вам нужно иметь его как объект даты, введите его в new date()

1 голос
/ 08 декабря 2011

Вот метод, использующий регулярное выражение для замены времени в дате, а затем для создания нового объекта Date.

dateTime = new Date(date.toString().replace(/(\d\d:){2}\d{2}/,/(\d\d:){2}\d{2}/.exec(time.toString())[0]));
1 голос
/ 08 декабря 2011

Я не знаю, является ли это лучшим, но вы можете попробовать следующее:

datetime = new Date(
  date.getUTCFullYear(),
  date.getUTCMonth(),
  date.getUTCDate(),
  time.getUTCHours(),
  time.getUTCMinutes(),
  time.getUTCSeconds()
);

Для получения дополнительной информации о объекте Date смотрите здесь .

1 голос
/ 08 декабря 2011
var msPerDay = 1000 * 60 * 60 * 24;
var newDateTime = new Date(date.getTime() + (time.getTime() % msPerDay));

РЕДАКТИРОВАТЬ: мой предполагает, что переменная даты является датой без времени.

...