0

我注意到我正在处理的一些数据(2000 多行数据)存在问题。

问题很奇怪:代码工作正常!直到JavaScript 无法生成正确日期时到达特定日期(在本例中为 2011 年 1 月 8 日)?

所以,解释一下:我正在使用 '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();=> 1311894000000
  • new Date(1311894000000);=> 2011 年 7 月 29 日星期五 00:00:00 GMT+0100 (BST)

唯一的区别是返回的 (GMT) 和 (BST) 值,这表明存在语言环境问题。但是为什么会发生这种情况,我该如何修复代码来解决这个问题?

非常感谢您能给我的任何帮助。

4

1 回答 1

4

你在做八进制!

使用基数!

parseInt(date[1],10)

来自MDN 文档parseInt(string[, radix])

如果 radix 未定义或为 0,JavaScript 假定如下:

  • 如果输入字符串以“0x”或“0X”开头,则基数为 16(十六进制)。
  • 如果输入字符串以“0”开头,则基数为八(八进制)。这个特性是非标准的,一些实现故意不支持它(而是使用基数 10)。由于这个原因,在使用 parseInt 时总是指定一个基数。
  • 如果输入字符串以任何其他值开头,则基数为 10(十进制)。
于 2012-10-05T17:01:53.133 回答