プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
JavaScript、Date()で日付指定する際の書式
JavaScriptのDateオブジェクトは

var dateObj = new Date("2013/07/02 01:02:03");

のように文字列を渡してDateオブジェクトを生成することができます。

実はこのDateオブジェクト、渡す日付文字列の書式が結構ユルイと言うか
いろいろな書式に対応していましてね。
そのせいでついつい油断しがちなのですが……ブラウザによって対応状況が違うようです。

使う書式によっては「このブラウザでは動くけどこのブラウザでは動かん」と
うっかりミスっぽいバグが紛れ込んでしまうのでご注意ください。

例えばこんなコードを実行するとですねφ(--)

<html>
<head>
</head>
<body>
<script language="JavaScript">
<!--

    var date01 = new Date("2013/7/2 01:02:03");
    var date02 = new Date("2013/07/02 01:02:03");
    var date03 = new Date("2013/07/0201:02:03");
    var date04 = new Date("13/7/2 01:02:03");
    var date05 = new Date("2013 07 02,01:02:03");

    var date06 = new Date("2013-7-2 01:02:03");
    var date07 = new Date("2013-07-02 01:02:03");

    var date08 = new Date("2013/07/02 01:02:03 +0900");
    var date09 = new Date("2013/07/02 01:02:03+0900");
    var date10 = new Date("2013/07/02T01:02:03+0900");

    var date11 = new Date("7,2,2013 01:02:03");
    var date12 = new Date("07,02,2013 01:02:03");
    var date13 = new Date("Jul,2,2013 01:02:03");
    var date14 = new Date("July,2,2013 01:02:03");
    var date15 = new Date("Jul 2,2013 01:02:03");
    var date16 = new Date("July 2,2013 01:02:03");

    var date17 = new Date('Tue Jul 2 2013 01:02:03 GMT+0900');
    var date18 = new Date('Tue Jul 02 2013 01:02:03 GMT+0900');
    var date19 = new Date('Tue Jul 02 2013 UTC+0900 01:02:03');

    document.write("2013/7/2 01:02:03:" + date01 + "<br>");
    document.write("2013/07/02 01:02:03:" + date02 + "<br>");
    document.write("2013/07/0201:02:03:" + date03 + "<br>");
    document.write("13/7/2 01:02:03:" + date04 + "<br>");
    document.write("2013 07 02,01:02:03:" + date05 + "<br>");
    document.write("<br>");
    document.write("2013-7-2 01:02:03:" + date06 + "<br>");
    document.write("2013-07-02 01:02:03:" + date07 + "<br>");
    document.write("<br>");
    document.write("2013/07/02 01:02:03 +0900:" + date08 + "<br>");
    document.write("2013/07/02 01:02:03+0900:" + date09 + "<br>");
    document.write("2013/07/02T01:02:03+0900:" + date10 + "<br>");
    document.write("<br>");
    document.write("7,2,2013 01:02:03:" + date11 + "<br>");
    document.write("07,02,2013 01:02:03:" + date12 + "<br>");
    document.write("Jul,2,2013 01:02:03:" + date13 + "<br>");
    document.write("July,2,2013 01:02:03:" + date14 + "<br>");
    document.write("Jul 2,2013 01:02:03:" + date15 + "<br>");
    document.write("July 2,2013 01:02:03:" + date16 + "<br>");
    document.write("Tue Jul 2 2013 01:02:03 GMT+0900:" + date17 + "<br>");
    document.write("Tue Jul 02 2013 01:02:03 GMT+0900:" + date18 + "<br>");
    document.write("Tue Jul 02 2013 UTC+0900 01:02:03:" + date19 + "<br>");
//-->
</script>

</body>
</html>

IE8ではこんな結果φ(--)

2013/7/2 01:02:03:Tue Jul 2 01:02:03 UTC+0900 2013
2013/07/02 01:02:03:Tue Jul 2 01:02:03 UTC+0900 2013
2013/07/0201:02:03:Fri Jan 17 02:03:00 UTC+0900 2014
13/7/2 01:02:03:Wed Jan 7 01:02:03 UTC+0900 1903
2013 07 02,01:02:03:NaN

2013-7-2 01:02:03:NaN
2013-07-02 01:02:03:NaN

2013/07/02 01:02:03 +0900:Tue Jul 2 01:02:03 UTC+0900 2013
2013/07/02 01:02:03+0900:Tue Jul 2 01:02:03 UTC+0900 2013
2013/07/02T01:02:03+0900:Tue Jul 2 01:02:03 UTC+0900 2013

7,2,2013 01:02:03:NaN
07,02,2013 01:02:03:NaN
Jul,2,2013 01:02:03:Tue Jul 2 01:02:03 UTC+0900 2013
July,2,2013 01:02:03:Tue Jul 2 01:02:03 UTC+0900 2013
Jul 2,2013 01:02:03:Tue Jul 2 01:02:03 UTC+0900 2013
July 2,2013 01:02:03:Tue Jul 2 01:02:03 UTC+0900 2013
Tue Jul 2 2013 01:02:03 GMT+0900:Tue Jul 2 01:02:03 UTC+0900 2013
Tue Jul 02 2013 01:02:03 GMT+0900:Tue Jul 2 01:02:03 UTC+0900 2013
Tue Jul 02 2013 UTC+0900 01:02:03:Tue Jul 2 01:02:03 UTC+0900 2013

Google Chrome バージョン 27.0.1453.116 mではこんな結果φ(--)

2013/7/2 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
2013/07/02 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
2013/07/0201:02:03:Invalid Date
13/7/2 01:02:03:Invalid Date
2013 07 02,01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))

2013-7-2 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
2013-07-02 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))

2013/07/02 01:02:03 +0900:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
2013/07/02 01:02:03+0900:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
2013/07/02T01:02:03+0900:Invalid Date

7,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
07,02,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
Jul,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
July,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
Jul 2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
July 2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
Tue Jul 2 2013 01:02:03 GMT+0900:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
Tue Jul 02 2013 01:02:03 GMT+0900:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))
Tue Jul 02 2013 UTC+0900 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 (東京 (標準時))

Firefox 21.0ではこんな結果φ(--)

2013/7/2 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
2013/07/02 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
2013/07/0201:02:03:Invalid Date
13/7/2 01:02:03:Wed Jan 07 1903 01:02:03 GMT+0900
2013 07 02,01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900

2013-7-2 01:02:03:Invalid Date
2013-07-02 01:02:03:Invalid Date

2013/07/02 01:02:03 +0900:Tue Jul 02 2013 01:02:03 GMT+0900
2013/07/02 01:02:03+0900:Invalid Date
2013/07/02T01:02:03+0900:Invalid Date

7,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
07,02,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
Jul,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
July,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
Jul 2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
July 2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
Tue Jul 2 2013 01:02:03 GMT+0900:Tue Jul 02 2013 01:02:03 GMT+0900
Tue Jul 02 2013 01:02:03 GMT+0900:Tue Jul 02 2013 01:02:03 GMT+0900
Tue Jul 02 2013 UTC+0900 01:02:03:Tue Jul 02 2013 00:59:00 GMT+0900

Opera 12.15ではこんな結果φ(--)

2013/7/2 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
2013/07/02 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
2013/07/0201:02:03:Invalid Date
13/7/2 01:02:03:Wed Jan 07 1903 01:02:03 GMT+0900
2013 07 02,01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900

2013-7-2 01:02:03:Invalid Date
2013-07-02 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900

2013/07/02 01:02:03 +0900:Tue Jul 02 2013 01:02:03 GMT+0900
2013/07/02 01:02:03+0900:Invalid Date
2013/07/02T01:02:03+0900:Invalid Date

7,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
07,02,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
Jul,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
July,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
Jul 2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
July 2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900
Tue Jul 2 2013 01:02:03 GMT+0900:Tue Jul 02 2013 01:02:03 GMT+0900
Tue Jul 02 2013 01:02:03 GMT+0900:Tue Jul 02 2013 01:02:03 GMT+0900
Tue Jul 02 2013 UTC+0900 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900

Windows Safari 4.0.4ではこんな結果φ(--)

2013/7/2 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
2013/07/02 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
2013/07/0201:02:03:Invalid Date
13/7/2 01:02:03:Invalid Date
2013 07 02,01:02:03:Invalid Date

2013-7-2 01:02:03:Invalid Date
2013-07-02 01:02:03:Invalid Date

2013/07/02 01:02:03 +0900:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
2013/07/02 01:02:03+0900:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
2013/07/02T01:02:03+0900:Invalid Date

7,2,2013 01:02:03:Invalid Date
07,02,2013 01:02:03:Invalid Date
Jul,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
July,2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
Jul 2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
July 2,2013 01:02:03:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
Tue Jul 2 2013 01:02:03 GMT+0900:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
Tue Jul 02 2013 01:02:03 GMT+0900:Tue Jul 02 2013 01:02:03 GMT+0900 ((W))
Tue Jul 02 2013 UTC+0900 01:02:03:Invalid Date

になりました。

今回試したすべてのブラウザでOKだったのは

2013/7/2 01:02:03
2013/07/02 01:02:03
2013/07/02 01:02:03 +0900
Jul,2,2013 01:02:03
July,2,2013 01:02:03
Jul 2,2013 01:02:03
July 2,2013 01:02:03
Tue Jul 2 2013 01:02:03 GMT+0900
Tue Jul 02 2013 01:02:03 GMT+0900

の形式です。

この結果を見るに、日本国内で扱う分には

2013/7/2 01:02:03



2013/07/02 01:02:03

形式にしておくのが無難ですかね。

まぁバグりさえしなければどんな書式でも良い話ですが、
書式によってはブラウザで認識しないことを頭の片隅に置いておいた方が良いと思います。
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● JavaScript  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事