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:00GMT+ 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:00GMT+ 0100(BST)

唯一の違いは、返される(GMT)値と(BST)値です。これは、ロケールの問題を示唆しています。しかし、なぜそれが発生するのでしょうか。また、それを回避するためにコードを修正するにはどうすればよいでしょうか。

あなたが私に与えることができるどんな助けにも感謝します。

4

1 に答える 1

4

あなたは8進数をやっています!

基数を使用してください!

parseInt(date[1],10)

MDN DocsparseInt(string[, radix])から:

基数が未定義または0の場合、JavaScriptは次のことを想定しています。

  • 入力文字列が「0x」または「0X」で始まる場合、基数は16(16進数)です。
  • 入力文字列が「0」で始まる場合、基数は8(8進数)です。この機能は非標準であり、一部の実装では意図的にサポートされていません(代わりに基数10を使用)。このため、parseIntを使用する場合は、常に基数を指定してください。
  • 入力文字列が他の値で始まる場合、基数は10(10進数)です。
于 2012-10-05T17:01:53.133 に答える