1

現在、タイムスタンプを処理するときに問題が発生しています。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

質問: ここでの問題は何ですか?

4

1 に答える 1

8

の場合parseInt('09'):

  • Chrome 24 は9を返すようです
  • FireFox 18 は数値を8 進数として扱うようで、 0を返します(0 は解析されますが、9 は解析されません)。

parseIntドキュメントからの引用:

ECMAScript 3 では推奨されていませんが、多くの実装では、0 で始まる数値文字列を 8 進数として解釈します。
[...]
関数 parseInt の ECMAScript 5 仕様では、実装が 0 文字で始まる文字列を 8 進数値として扱うことを許可しなくなりました。
[...]
2011 年現在、多くの実装ではこの動作が採用されておらず、古いブラウザーをサポートする必要があるため、常に基数を指定してください。

解決策: コードを修正し、基数パラメーターを明示的に指定します。

new Date(parseInt('2012', 10), parseInt('09', 10) - 1, parseInt('30', 10)).getTime()/1000
// 1348945200
于 2013-01-26T23:00:10.847 に答える