JavaScript日期类型的标准化实现?

3

new Date("2")是:

  • 在Chrome上为"Thu Feb 01 2001 00:00:00 GMT-0500 (Eastern Standard Time)"
  • 在Firefox和IE 9上为"Invalid Date"
  • 在node.js上为"Thu, 01 Feb 2001 05:00:00 GMT"

由于node.js使用Google V8 JavaScript引擎,而Chrome也来自Google,因此我想这可能是Google的一种特殊处理。

这是个问题。有没有一种简单的方法可以规范Date类型在不同平台上的行为?

谢谢。

编辑

当然,"2"对于日期来说并不好。但是,如果使用jQuery验证插件的"date"方法,则"2"是完全有效的输入,因为这个特定的验证方法将其逻辑推迟到Date JavaScript类型进行实际验证。如果Date类型的实现合理,这是很有道理的。但显然在Chrome(和node.js)中不是这样的。


1
为什么这样做不好?只是不要使用具有副作用的不支持字符串来提供日期。MDN:dateString:表示日期的字符串值。该字符串应采用解析方法(符合IETF标准的RFC 2822时间戳)所识别的格式。 - mplungjan
1
你想要什么?“2”对于日期来说相当模糊,所以我不确定为什么你会将其用作日期。 - pimvdb
我认为“2”不是一个有效的时间戳,因此导致了实现上的差异。使用有效的时间戳可以解决这个问题。 - Madara's Ghost
1个回答

4
不行。ECMAScript规范规定,单参数“Date”构造函数(参数为字符串)将延迟到“Date.parse”,这是“实现相关的”。来源:ECMAScript规范
因此,如果您希望在各种实现中获得相同的行为,请避免使用此构造函数。
如果您的应用程序中,字符串“2”的含义被公认为是日期,则应实现自己的逻辑来解释它。没有关于此的“标准”含义。如果您有更多人所熟知的字符串,则会发现不同的实现行为更加相似。但在您的情况下,建议您自己解析字符串,并明确提供有关Date的更明确的构造函数的含义。

1
这很残忍,因为你所建议的是避免同时使用 new Date(string)Date.parse(string) - mark
你说出了什么不应该做的,这很好,但告诉人们应该做什么才更好。你的意思是说你总是手动解析日期字符串以提取日期组件,然后使用它们调用Date构造函数吗? - mark
我已经编辑了答案。不,我并不总是手动解析日期字符串。但是如果它们是模糊的或非标准的,那么我会这样做。 - David M
正如我在问题中提到的那样,“2”对我来说也不是一个有效的日期。但是,我正在使用jQuery验证插件来验证用户输入,而“2”被验证为有效!因为“date”验证方法委托给Date构造函数。 - mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接