我注意到我正在处理的一些数据存在问题(2000多行数据)。
问题很奇怪:代码工作正常!当JavaScript无法生成正确的日期时, UNTIL 达到了特定日期(在本例中为01/08/2011)?
所以,解释一下:我正在采用'dd / mm / yyyy'格式的字符串并且正在执行(这不起作用):
var date = '01/08/2011'.split('/');
var milliseconds = new Date(date[2], parseInt(date[1]) - 1, date[0]).getTime();
=> 1291161600000 new Date(1291161600000);
=> 2010年12月1日星期三00:00:00 GMT + 0000(GMT)...但是,确切的代码在2011年8月1日之前的任何日期都能正常运作吗?
请再次使用29/07/2011
...
var date = '29/07/2011'.split('/');
var milliseconds = new Date(date[2], parseInt(date[1]) - 1, date[0]).getTime();
=> 13118.94亿new Date(1311894000000);
=> 2011年7月29日星期五00:00:00 GMT + 0100(BST)唯一的区别是返回的(GMT)和(BST)值,这表明了区域设置问题。但是为什么会发生这种情况,我如何修复代码来解决这个问题呢?
非常感谢你能给我的任何帮助。
答案 0 :(得分:4)
你正在做八进制!
使用基数!
parseInt(date[1],10)
来自MDN Docs parseInt(string[, radix])
:
如果radix未定义或为0,则JavaScript假定以下内容:
- 如果输入字符串以“0x”或“0X”开头,则基数为16(十六进制)。
- 如果输入字符串以“0”开头,则基数为8(八进制)。此功能是非标准的,有些实现故意不这样做 支持它(而不是使用基数10)。因此总是如此 使用parseInt时指定基数。
- 如果输入字符串以任何其他值开头,则基数为10(十进制)。