我目前在处理时间戳时遇到了麻烦。我正在 Chrome 24.0.1312.56 m 和 Firefox 18.0.1 控制台中调试以下完全相同的代码:
new Date(parseInt('2012'), parseInt('09') - 1, parseInt('30')).getTime()/1000
当我在Chrome中执行它时,我得到:
1348956000
当我在Firefox中执行它时,我得到:
1325199600
问题:这里有什么问题?
我目前在处理时间戳时遇到了麻烦。我正在 Chrome 24.0.1312.56 m 和 Firefox 18.0.1 控制台中调试以下完全相同的代码:
new Date(parseInt('2012'), parseInt('09') - 1, parseInt('30')).getTime()/1000
当我在Chrome中执行它时,我得到:
1348956000
当我在Firefox中执行它时,我得到:
1325199600
问题:这里有什么问题?
对于parseInt('09')
:
parseInt
从文档中引用:
尽管 ECMAScript 3 不鼓励,但许多实现将以 0 开头的数字字符串解释为八进制。
[...]
函数 parseInt 的 ECMAScript 5 规范不再允许实现将以 0 字符开头的字符串视为八进制值。
[...]
由于截至 2011 年许多实现尚未采用此行为,并且必须支持较旧的浏览器,因此请始终指定基数。
解决方案:修改代码并明确指定基数参数:
new Date(parseInt('2012', 10), parseInt('09', 10) - 1, parseInt('30', 10)).getTime()/1000
// 1348945200