2011-12-07 19 views
19

我有2個日期對象。我想從一個時間和另一個時間獲取日期,並將它們合併爲一個新的日期對象。如何在JavaScript中合併兩個日期?

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) 

我該如何做到最好?

+2

您是否需要比[this]更多的信息(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)? – Jon

回答

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

請注意'getYear'已被棄用,應該切換到'getFullYear'。此外,'getDay'返回星期幾,應該切換到'getDate'。 –

+0

就我所知,這個解決方案沒有考慮夏令時? – chmanie

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

編輯:礦假定日期變量是沒有任何時間的日期。

1

我不知道這是不是最好的,但你可以嘗試以下方法:

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

對於Date對象上進一步參考看看here

+0

沒有爲我工作 - 打破了TZ和搞砸了時間 – Kuf

+0

@Kuf你可以更具體一點,也許舉個例子嗎?你究竟想要完成什麼?如果它與OP所要求的完全不同,你應該考慮開始/詢問你自己的問題。 –

+0

我將此評論留爲警告。在你的代碼中,你需要花費當地時間,然後將其轉換爲UTC,然後再將其存儲爲本地,這會擾亂TZ。我通過忽略每個函數名稱中的UTC來解決它(如@pna答案)。希望是有道理的。 – Kuf

2

您可以使用字符串函數構建目標串...

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

然後如果你需要把它作爲一個日期對象,它送入一個new date()

5

如何像這樣:

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

time.setFullYear(year); 
time.setMonth(month); 
time.setDate(day); 
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]()); 
} 
1

下面是使用正則表達式來代替時間日期,然後穿心蓮的方法e新的Date對象。

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