2013-03-18 185 views
-1

我正在創建一個必須「永不」過期的cookie,儘管我不確定這是否可能,所以作爲折衷,我已決定設置「過期: 「日期到2099/12/31 23:59:59。然而,要達到這個日期,我需要進行如下設置:JS Date()需要不正確的數據才能返回正確的結果

var killdate = new Date(2099, 11, 31, 23, 59, 59); 

現在,除非我錯過了什麼,有這麼沒有11月31日爲什麼我要設置日期爲這樣?

這是一個比我的代碼的主要問題更好奇的事情(雖然我想確保我沒有弄髒任何東西),但是我的在線研究並沒有完全成功地清除它我。

感謝

回答

2

MDN docs

月代表月份,以0開頭的1月至11月爲
整數 價值。

幾個月從0-11運行,而不是1-12。你設置的日期,事實上,12月31日,2099年

+0

啊,是的。當然。我甚至沒有想到這一點(這也解釋了爲什麼我沒有在線搜索的喜悅......我正在徹底搜尋錯誤的球場)。感謝您的快速回復 – UbuntuElphie 2013-03-18 20:45:20

0

要知道,有些瀏覽器有問題,日期過去2038(當unix epoch time超過32-bitint

var killdate = new Date(2099, 11, 31, 23, 59, 59); 

現在,除非我錯過了什麼,11月31日沒有,爲什麼我必須將日期設置爲

這只是從現在開始使用的遠期日期。在你的榜樣的日期實際上是31-Dec-2099 23:59:59(月數爲0至11)

只是對知識AS你的好奇心的:

JS Date對象是從Java 1.0移植,這就是原因。繼承所有缺陷。

一切,但一個月的一天是從0開始,see here for a full list including ranges

+0

好的,但這應該是一個評論,而不是一個答案,因爲它不試圖回答爲什麼十二月是11的實際問題。 – nnnnnn 2013-03-18 20:45:45

0

的日子佔了較長天的任何一個月,而不是特定的一個。

Max hours = 23 
Max minutes = 59 
Max seconds = 59 
Max days = 31 
Max months = 12 
Max years = varies/changes 

他們從不相互依賴。我認爲,如果您使用UNIX時間戳,它們會計算當月的日期。