2011-12-23 98 views
2

Date對象:javascript日期爲什麼是日期新日期(「2011-12-13」)被認爲是星期一而不是星期二?實例化這樣

new Date("2011-12-13") 

返回日期對象認爲他們自己是一個星期一:

Date {Mon Dec 12 2011 16:00:00 GMT-0800 (PST)} 

但根據我的日曆,12/13/2011是星期二。奇怪的是,當我實例化日期對象是這樣的:

new Date("12/13/2011") 

這(正確)返回一個星期二:

Date {Tue Dec 13 2011 00:00:00 GMT-0800 (PST)} 

我如何使用語法在我最初的例子(年 - 月 - 日)並根據我的日曆獲取一週的正確日期?

回答

7

您可能想要查看https://stackoverflow.com/a/163584/436641瞭解有關使用字符串在JavaScript中創建Date對象的一些注意事項。簡而言之,可靠性,你應該這樣做:

new Date(2011, 11, 13); 

(請注意,第二個參數,一個月,一月份是0到11月,而不是1到12)

在你的具體情況是,當你用"2011-12-13"實例化它使用的是GMT,然後調整到你的本地時區,在你的情況下是GMT時間8小時。所以你在問問題的前一天下午4點。那麼這是星期一,而不是星期二。 (在結果中說時間是16:00:00,日期是12日而不是13日?)

當你用"12/13/2011"實例化時,你在當地時區的13號獲得午夜。所以你得到星期二,你請求的那一天。

的差(可能)通過處理這些字符串作爲ISO 8601的時間戳中的一個和另一個作爲RFC 822的時間戳的事實Date將字符串傳遞給它的靜態parse()方法,它是(可能)所解釋的,並且這些時間戳格式的時區的默認/最佳猜測是不同的。有關Firefox的情況,請參閱https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse。其他瀏覽器可能也可能不一樣。這就是爲什麼最好不要使用字符串(如果你使用字符串,使用長而明確的標準時間戳格式而不是截斷的)。

+0

我加了可能的原因作爲我的答案的最後一段。基本上,'Date.parse()'必須猜測它得到一個截斷的時間戳字符串時的意圖,因此它猜測它認爲可能是什麼時區。 – Trott 2011-12-23 06:03:54

+0

值得注意的是,如果您將「00:00:00」添加到字符串中,您將得到您要查找的結果。在我的情況下,只處理字符串並不解析日期部分(並在本月中減1)更容易。 – 2014-01-23 19:54:04

相關問題