2014-09-29 21 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

相关问题