2014-09-29 42 views
0

我已經到位現有的日期時間字符串新的Date()當日日期時間字符串在javascript

new Date('2014-08-01T00:00:00') 

,而不是返回2014-08-01但是,它返回爲2014-返回前一天07-31在實際的angularJS視圖中。

我不知道這個日期時間字符串是否有效,如果沒有,爲什麼它無效。

T可能是字符串返回錯誤日期的原因嗎?

的執行console.log返回Thu Jul 31 2014 20:00:00 GMT-0400 (EDT)

日期謝謝

讓我們調用這些-2是有毒的投票起伏。他們應該回想起他們正在努力理解現在對他們表現出來的基本概念的那些日子。這是一個恥辱。

+2

您的時區可能會與返回的結果混淆。什麼是返回日期的時間? – Cerbrus 2014-09-29 13:35:38

+0

顯示的日期使用您的瀏覽器時區。 – Florent 2014-09-29 13:36:46

+0

你如何在你的角度使用它? – robertklep 2014-09-29 13:37:16

回答

3

目前(秋季2014),JavaScript的日期/時間格式的ISO-8601發散的一個非常重要的方式:如果在字符串上沒有時區指示符,它假定爲Z(「Zulu」,GMT)。

所以

new Date('2014-08-01T00:00:00') 

...是午夜GMT 8月1日。如果您居住在格林威治標準時間東部,那麼您的當地時間將在31日。

但是,這個與ISO-8601的不兼容問題正在ES6中被修復,一些實現(包括最新的Chrome版本)已經在更新它。 ES6規範將默認值更改爲本地時間;請參閱draft PDFsthis unofficial HTML version中的第20.3.1.15節(「日期時間字符串格式」,節號可能更改)。

+0

我可以知道在這種情況下,「T」(在n日期之間)是什麼意思? – Ezeewei 2014-09-29 13:40:18

+0

@陳:只是把時間和日期分開, 'T'代表「時間」。 JavaScript從ISO-8601中獲得了它(儘管JavaScript的格式是**而不是ISO-8601),它使用它來避免字符串中有空格。 – 2014-09-29 13:42:12

+1

@ TJCrowder--根據ES5確實如此,但[* ES6草案*](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-date-time-string-format)更改與ISO 8601一致,其中沒有時區的日期是本地的。 Chrome已經實現了它。 – RobG 2014-10-09 05:27:41

2

顯示的日期使用的是您的瀏覽器/計算機的時區。這意味着,如果你是在GMT-1和輸入2014-08-01T00:00:00,實際日期是2014-08-01T00:00:00 - 1 hour = 2014-07-31T23:00:00

+1

......或T.J Crowder說的......他的解釋更好一些^ _^ – DoXicK 2014-09-29 13:39:02

+1

我其實也認爲你的回答也能幫助我展示一個例子。你們兩個是恭維答案。很難選擇哪個是最好的天哪....但是因爲克勞德得到了更多的細節,我會對他的投票。但是,您的答案也非常棒!爲你而投票! – Ezeewei 2014-09-29 14:13:20

相關問題