Ответ 1
var datetime = new Date(date.getFullYear(), date.getMonth(), date.getDate(),
time.getHours(), time.getMinutes(), time.getSeconds());
У меня есть 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)
Как я могу это сделать?
var datetime = new Date(date.getFullYear(), date.getMonth(), date.getDate(),
time.getHours(), time.getMinutes(), time.getSeconds());
Как насчет чего-то вроде этого:
var year = date.getFullYear(),
month = date.getMonth(),
day = date.getDate();
time.setFullYear(year);
time.setMonth(month);
time.setDate(day);
var parts = ['Hours', 'Minutes', 'Seconds', 'Milliseconds'];
for (var i=0, p; p=parts[i], i<parts.length; i++) {
date['setUTC'+p]( time['getUTC'+p]() );
}
вы можете использовать строковые функции для построения целевой строки...
datetime = date.toString().substr(0,16) + time.toString().substr(16,40)
то, если вам нужно иметь его как объект даты, подайте его в new date()
var msPerDay = 1000 * 60 * 60 * 24;
var newDateTime = new Date(date.getTime() + (time.getTime() % msPerDay));
EDIT: my предполагает, что переменная date - это дата без какого-либо времени.
Я не знаю, является ли это лучшим, но вы можете попробовать следующее:
datetime = new Date(
date.getUTCFullYear(),
date.getUTCMonth(),
date.getUTCDate(),
time.getUTCHours(),
time.getUTCMinutes(),
time.getUTCSeconds()
);
Для дальнейших ссылок на объект Date
смотрите здесь.
Вот метод, использующий regexp для замены времени в дате и затем создания нового объекта Date.
dateTime = new Date(date.toString().replace(/(\d\d:){2}\d{2}/,/(\d\d:){2}\d{2}/.exec(time.toString())[0]));