2012-12-03 64 views
5

JavaScript中設置JavaScript日期對象的日期部分而不影響時間部分的最佳方式是什麼?更新javascript對象的日期部分而不更改時間部分

比方說你有一個這樣 Wed Oct 31 2012 10:15:00 GMT-0400 (EDT)

日期和你想更新是11月1日不改變時間。

乍一看,你會以爲這會工作,

exampledate.setFullYear(2012); 
exampledate.setMonth(10); 
exampledate.setDate(1); 

但結果是 Sat Dec 01 2012 10:15:00 GMT-0500 (EST)

我認爲原因是,10月份有31天,11月以來僅有30。由於這顯然不能一直正常工作。我的其他選擇是什麼?我需要創建一個新的日期對象嗎?

+1

您是否在談論從EDT到EST的轉換?如果是這樣,請記住,在11月4日凌晨2點,使用EDT轉換到EST的國家,同時神奇地接受了額外的一小時。 –

+1

此外,你應該setMonth'調用11而不是10?我看到最後的日期是十二月。 –

+1

這就是問題所在。由於原始日期是2012年10月31日,我將日期設置爲2012年11月31日,這不是真正的日期,因此第二行將日期設置爲12月1日。最後一行沒有做任何事情。 – plusplusben

回答

2

JavaScript日期對象設置器方法通常允許您(可選)一次設置多個日期/時間組件(除了主要組件),以適合情況 - 這就是您想要執行的操作。

爲您的使用情況下,setFullYear語法setFullYear(year,month,day),所以除了明確設置年份(這將導致月份和日期隱式更新根據您的初始日期),你也可以明確地設置月份和你在一起的那一天。例如:

var d = new Date(); 
d.setFullYear(2020,10,3); 

將返回

Tue Nov 03 2020 13:10:34 GMT-0500 (EST) 

詳情請參閱the JavaScript setFullYear() method。由於Date對象的時間組件(例如小時,分鐘,秒,毫秒)不依賴於日期部分(年,月,日),因此您的初始時間組件將被維護。如果您需要更新時間組件,則可以根據需要安全地使用setHours()或其他方法,因爲不會發生對日期組件的隱式更新。

+0

太棒了,我不知道你可以做到這一點。 – plusplusben

2

第一個設置日期,然後是月份。