Chrome和Firefox之间的时间戳转换差异

Kir*_*ril 1 javascript firefox integer google-chrome date

我在处理时间戳时遇到了麻烦.我在Chrome 24.0.1312.56 m和Firefox 18.0.1控制台中调试以下完全相同的代码:

new Date(parseInt('2012'), parseInt('09') - 1, parseInt('30')).getTime()/1000
Run Code Online (Sandbox Code Playgroud)

当我在Chrome中执行它时,我得到:

1348956000
Run Code Online (Sandbox Code Playgroud)

当我在Firefox中执行它时,我得到:

1325199600
Run Code Online (Sandbox Code Playgroud)

问题:这里有什么问题?

Sal*_*n A 8

用于parseInt('09'):

  • Chrome 24似乎回归9
  • FireFox 18似乎将数字视为八进制,因此返回0(解析0但不解析9)

parseInt文档引用:

尽管ECMAScript 3不鼓励,但许多实现解释以前导0开头为八进制的数字字符串.
[...]
函数parseInt的ECMAScript 5规范不再允许实现将以0字符开头的字符串视为八进制值.
[...]
由于许多实现在2011年都没有采用此行为,并且由于必须支持旧版浏览器,因此请始终指定基数.

解决方案:修改代码并显式指定基数参数:

new Date(parseInt('2012', 10), parseInt('09', 10) - 1, parseInt('30', 10)).getTime()/1000
// 1348945200
Run Code Online (Sandbox Code Playgroud)

  • Mozilla正在修改Firefox以立即关注Chrome:https://bugzilla.mozilla.org/show_bug.cgi?id = 786135 (4认同)