2012-09-03 36 views
2

new Date("2")是:Date类型的规范化JavaScript实现?

  • “星期四2001年2月1日00:00:00 GMT-0500(东部标准时间),” 在Chrome
  • “无效的日期” 关于Firefox和IE 9
  • “星期四, 01 Feb 2001 05:00:00 GMT“on node.js

由于node.js使用谷歌V8 javascript引擎,Chrome也是谷歌,我想这是一个googlish调整。

这很糟糕。是否有一种简单的方法来标准化不同平台上的Date类型的行为?

谢谢。

编辑

当然, “2” 是不好的日期。但是,如果使用jQuery验证器插件的“日期”方法,那么“2”是完全有效的输入,因为这种特定的验证方法将其逻辑推迟到JavaScript类型以进行实际验证。如果Date类型的实现是明智的,这是非常有意义的。 Chrome(和node.js)显然不是这种情况。

+1

这是为什么这么糟糕? [MDN](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date):dateString:表示日期的字符串值。该字符串应采用解析方法(符合IETF的RFC 2822时间戳)识别的格式。 – mplungjan

+1

你想要什么? ''2“'对于一个日期来说很模糊,所以我不确定你为什么要用它来约会。 – pimvdb

+0

我不认为“2”是一个有效的时间戳,因此实施的差异。使用有效的时间戳将解决此问题。 –

回答

3

否。ECMAScript规范指出,单参数Date构造函数(其中该参数是一个字符串)将遵循“依赖于实现”的Date.parse。来源:ECMAScript specification

因此,如果您希望跨实现具有相同的行为,请避免使用此构造函数。

如果您的应用程序已将字符串"2"确定为日期,那么您应该实施自己的逻辑来解释它。这没有“标准”的含义。如果你的字符串对整个世界更具有可识别性,你会发现不同的实现行为更加类​​似。但在你的情况下,你会被建议自己解析字符串,并明确地将2的含义提供给更加明确的构造函数Date

+0

这是残酷的,因为你建议避免同时使用'new Date(string)'和'Date.parse(string)'。 – mark

+1

这是残酷的,但不要拍摄信使...... –

+0

你告诉什么不该做,这是好的,但不如告诉是做什么。你的意思是你总是手动解析日期字符串来提取日期组件,然后用它们调用'Date'构造函数? – mark