2012年7月18日水曜日

JavaScriptのDateオブジェクトの挙動

ハマりメモ。

Dateをnewするときに渡す日付の書式でハマってしまった。

再現コード。
以下すべて、各ブラウザの開発ツールのコンソール上で実行。

Chrome 20.0.1132.57 m

new Date('2012/01/01 00:00:00');
Sun Jan 01 2012 00:00:00 GMT+0900 (東京 (標準時))
new Date('2012-01-01 00:00:00');
Sun Jan 01 2012 00:00:00 GMT+0900 (東京 (標準時))

FireFox 12.0

>>> new Date('2012/01/01 00:00:00');
Date {Sun Jan 01 2012 00:00:00 GMT+0900}
>>> new Date('2012-01-01 00:00:00');
Date {Invalid Date}

Safari 5.1.7

new Date('2012/01/01 00:00:00');
Sun Jan 01 2012 00:00:00 GMT+0900 (“Œ‹ž (•W€Žž))
new Date('2012-01-01 00:00:00');
Invalid Date


InternetExplorer 9

>> new Date('2012/01/01 00:00:00'); 
Sun Jan 1 00:00:00 UTC+0900 2012
>> new Date('2012-01-01 00:00:00');
Invalid Date



とある、JSライブラリを使ったちょっと凝った見た目の画面にて、
Chrome以外のブラウザで正常に表示できないという不具合が発生。

原因は、ライブラリに受け渡すXMLデータ上で、日付のフォーマットが
ハイフン区切りになっていたこと。
MySQLを扱ってる人には見なれたフォーマットですね。
JavaScript的には、スラッシュ区切りが正解なので、
うっかりそのまま出力した僕のミスです。

ただ、人の作ったライブラリ&日付の解釈が問題になるのがかなり奥の方のコードだったので
原因に気づくまで相当時間をかけてしまった…。

あと、「Chromeで見れればほかのブラウザでも見れるだろう」なんて安易な考えをしたのも間違い。
普段なら4ブラウザで確認はとるんだけど、
このライブラリの稼働実績がすでにあったので、
1つのブラウザで表示できれば問題ないと思ってしまった。

確認、大事。

ちなみに、Chromeはこんな書式でも正常に解釈したりする。


new Date('2012-01/01 00:00:00');
Sun Jan 01 2012 00:00:00 GMT+0900 (東京 (標準時))

日付の区切りは、-か/であればよい、という判断なのかな…?

0 件のコメント:

コメントを投稿