用破折号分隔并以年份开头时出现Javascript Date.parse错误
Javascript Date.parse bug when dash-delimited and starts with year
我正在寻求确认这是否是Javascript的Date.parse方法的真正文档和/或实现错误。
我所指的医生在https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse他们说:"如果你没有指定时区,就假设是本地时区。">
但下面的代码显示,尽管没有指定时区,但如果传递给Date.parse的字符串以4位数的年份表示形式开始,并以短划线分隔,则本地时间是而不是(而是应用了我的时区偏移量(。
var euroStyleDate = '2011-10-04';
var amerStyleDate = '10/04/2011';
var euroStyleParsed = Date.parse(euroStyleDate);
var amerStyleParsed = Date.parse(amerStyleDate);
console.log(euroStyleParsed); //1317686400000
console.log(amerStyleParsed); //1317700800000
console.log(new Date(euroStyleParsed));
//Date {Mon Oct 03 2011 20:00:00 GMT-0400 (Eastern Daylight Time)}
console.log(new Date(amerStyleParsed));
//Date {Tue Oct 04 2011 00:00:00 GMT-0400 (Eastern Daylight Time)}
甚至可能还有其他情况,如果我不正确的话,我相信我不是第一个发现这一点的人。因此,毫无疑问,如果有人知道相关链接,我当然希望能得到更深入的信息。
我在FF3、Chrome for Windows中遇到了这种情况,当然,作为一个特殊的IE8似乎甚至无法在2011-10-04上执行转换:我只是在我的应用程序中得到了一个空字符串
提前感谢您提供任何进一步的见解或资源。
我也遇到了这个概念。对于任何像我一样在谷歌上搜索"Javascript日期短划线-斜杠"的人来说,这是我能想到的关于这里发生的事情的最清晰的演示。
简而言之,斜线表示本地时区,短划线表示UTC。其他答案也解释了原因。
<script type="text/javascript">
var
testB = new Date("2012/02/09"),
testC = new Date("2012-02-09");
alert(testB.toString());
alert(testC.toString());
alert(testC.toUTCString());
</script>
**更新:**这里似乎有几个不同的标准在起作用:
-
EMCAScript<5标准中允许用于标准IETF格式中的日期,例如
Sun Oct 03 2010
。根据这些日期,假定为当地时区。 -
在ECMAScript 5中,也允许ISO 8601标准的有限版本,例如
2010-10-03
。规范似乎在说(也许遵循ISO 8601?(在这种情况下,如果没有指定UTC时区,则假定为UTC时区。 -
我还没有找到一个说明
Date.parse
可以处理mm/dd/yyyy
日期的规范,但我的浏览器(Chrome 14(显然可以,可能其他浏览器也可以。这似乎遵循了上面的标准1,假设是本地时区。然而,考虑到它不在规范中,我建议不要使用这个版本,因为它可能取决于浏览器(如果我在浏览器上设置了欧洲语言环境,我不知道10-03-2010
是否会导致不同的日期(。
在大多数解释器中,本机Date.parse
函数存在一些问题——我经常遇到像您描述的那样的时区问题。所以一般来说,我要么使用像Datejs这样的库,要么编写自己的解析函数。SIMILEAJAX库的DateTime模块有一个很好的示例函数,用于解析ISO-8601日期(您所说的euroStyleDate
,加上一个可选的时间组件(。
在设置日期时,我通常使用new Date()
,然后使用setUTC*()
函数将不同的日期元素设置为我想要的精度。这并不完美,但至少你正在处理一个清晰的时区。
- Javascript Date.toString() formatting?
- Javascript Date 对象因格式而异:yyyy-mm-dd vs mm-dd-yyyy
- JavaScript:Date 的 toString() 和 toLocaleString() 方法之间的区别
- Javascript Date - 只设置日期,忽略时间
- Javascript Date() object with NULL Time
- Javascript Date对象到日期字符串
- Javascript Date():如何将本地日期转换为GMT
- 传递日期和日期时间之间的Javascript Date()差异
- Javascript Date MAX_VALUE
- Javascript: Date().toJSON() 更改日期.
- Javascript Date.toJSON don't获取时区偏移量
- 使用Mysql UNIX_TIMESTAMP()与JAVASCRIPT Date.UTC()获得不同的结果
- 闰年的计算似乎与JavaScript Date不匹配
- 在 Node.js 中向 javascript Date 添加分钟数
- Javascript date picker asp.net mvc
- 将数组传递给Javascript Date构造函数,是标准的吗?
- highcharts:将useUTC=true milliseconds转换为javascript Date对象
- Javascript Date 中的日期无效
- Javascript Date() 有时会返回错误的值
- 将 JavaScript Date 对象格式化为特定格式