如何在JavaScript中合并两个日期?

时间:2011-12-07 23:09:05

标签: javascript datetime date

我有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 个答案:

答案 0 :(得分:38)

var datetime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 
                        time.getHours(), time.getMinutes(), time.getSeconds());

答案 1 :(得分:5)

这样的事情怎么样:

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

time.setFullYear(year);
time.setMonth(month);
time.setDate(day);

答案 2 :(得分:3)

var parts = ['Hours', 'Minutes', 'Seconds', 'Milliseconds'];
for (var i=0, p; p=parts[i], i<parts.length; i++) {
  date['setUTC'+p]( time['getUTC'+p]() );
}

答案 3 :(得分:2)

您可以使用字符串函数来构建目标字符串...

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

然后,如果您需要将其作为日期对象,请将其输入new date()

答案 4 :(得分:1)

var msPerDay = 1000 * 60 * 60 * 24;
var newDateTime = new Date(date.getTime() + (time.getTime() % msPerDay));

编辑:我假设日期变量是没有任何时间的日期。

答案 5 :(得分:1)

我不知道这是否是最好的,但您可以尝试以下方法:

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

有关Date对象外观here的进一步参考。

答案 6 :(得分:1)

这是一个使用regexp替换日期时间然后创建新Date对象的方法。

dateTime = new Date(date.toString().replace(/(\d\d:){2}\d{2}/,/(\d\d:){2}\d{2}/.exec(time.toString())[0]));