如何格式化日期字符串以识别为绝对值,这意味着新的日期(字符串)应返回没有时区偏移的日期对象?
我总是知道JavaScript中的日期很有趣,但这是呃...太荒谬了? 我希望我错过了什么。
FIREFOX:
new Date("2015-01-01") -> Jan 1 - OK
new Date("1/1/2015") -> Dec 31 - THAT HURT!
new Date("2015-01-01T00:00:00Z") -> Jan 1 - OK
new Date("January 1, 2015") -> Dec 31 - THAT HURT!
new Date("January 1, 2015 00:00:00") -> Dec 31 - THAT HURT!
new Date(2015, 0, 1) -> Dec 31 - THAT HURT!
new Date(2015, 0, 1, 0, 0, 0) -> Dec 31 - THAT HURT!
new Date(2015, 0, 1, 1, 0, 0) -> Jan 1 - YOU'RE KIDDING ?
new Date("2015/01/01") -> Dec 31 - THAT HURT!
反转片
new Date("2015-01-01") -> Jan 1 - OK
new Date("1/1/2015") -> Jan 1 - OK
new Date("2015-01-01T00:00:00Z") -> Jan 1 - OK
new Date("January 1, 2015") -> Jan 1 - OK
new Date("January 1, 2015 00:00:00") -> Jan 1 - OK
new Date(2015, 0, 1) -> Jan 1 - OK
new Date(2015, 0, 1, 0, 0, 0) -> Jan 1 - OK
new Date(2015, 0, 1, 1, 0, 0) -> Jan 1 - OK
new Date("2015/01/01") -> Jan 1 - OK
IE
new Date("2015-01-01") -> NaN - THAT HURT!
new Date("1/1/2015") -> Jan 1 - OK
new Date("2015-01-01T00:00:00Z")-> NaN - THAT HURT!
new Date("January 1, 2015") -> Jan 1 - OK
new Date(2015, 0, 1) -> Jan 1 - OK
new Date(2015, 0, 1, 0, 0, 0) -> Jan 1 - OK
new Date(2015, 0, 1, 1, 0, 0) -> Jan 1 - OK
new Date("2015/01/01") -> Jan 1 - OK
据我所知,在某些情况下,Firefox正在补偿时区偏移,我知道IE很糟糕。但是如何在浏览器中获得一致的新日期(无论如何)?
如果有人可以解释这种行为,那么作为一个额外的好处,我将不那么沮丧,因为它变成了我的主要问题。
谢谢!
编辑:清理输出以使不一致的行为更清晰。 编辑:添加建议的字符串格式“2015/01/01” - 在FF中不起作用(在我的时区: - /)
答案 0 :(得分:1)
这种行为已经存在了很长一段时间的问题,似乎没有人明确答复为什么开发人员选择了这些类型的选项。一些“经验法则”要遵循:
除了插件之外,我可以推荐的最佳建议是将Date函数的输入字符串格式化为您知道在浏览器中保持一致的内容。你已经完成了研究,所以这应该很简单。一旦你习惯了这一段时间,它将成为第二天性。
我确实发现了这一段时间。我喜欢这个功能,因为它给了我“允许UTC”的“选择”: HERE
还有 DateJS
答案 1 :(得分:-1)
我对日期的跨浏览器兼容性的选项是Date.parse(<<My Date String>>)
这将返回以毫秒为单位的日期时间,然后您可以以任何您想要的方式格式化它。
我只在IE8和Chrome中试过这个。