1. javascriptのgetTime()で期待値が取得できない

    jsでdate型からgetTimeしてサーバーとやり取りする際に、pcに設定されているタイムゾーンでgetTimeされてしまって困りました。



    例えば、2013/12/10 12:00:00のdateオブジェクトを生成してgetTime()すると、

    var date = new Date(2013,(12-1),10,12,0,0);

    console.log(date);
    console.log(date.getTime());

    //日本(東京)
    default: Tue Dec 10 2013 12:00:00 GMT+0900 (UTC)
    default: 1386644400000

    //ドイツ(ベルリン)
    default: Tue Dec 10 2013 12:00:00 GMT+0100 (CET)
    default: 1386673200000

    ずれてる、、、。

    これはDate.getTimeメソッドが1970 年 1 月 1 日 00:00:00 UTC からの経過ミリ秒で表されるため、タイムゾーンに設定されている場所の時差の分だけずれてしまうためです。

    これを修正するにはDate.getTimezoneOffset()値(分単位)を取得して時差を修正します。

    以下は東京(9時間)に合わせています。
    var date = new Date(2013,(12-1),10,12,0,0);

    var offset = ((9 * 60) + (date.getTimezoneOffset())) * 60* 1000;//時差取得
    var millitime = date.getTime() - offset;
    var _date = new Date(millitime);

    console.log(_date);
    console.log(_date.getTime());

    //日本(東京)
    Tue Dec 10 2013 12:00:00 GMT+0900 (UTC)
    1386644400000

    //ドイツ(ベルリン)
    Tue Dec 10 2013 04:00:00 GMT+0100 (CET)
    1386644400000

     

    こちらのサイトが非常に詳しく説明されています。感謝です。

    http://www.artemis.ac/contents/javascript/jsdate.htm

     

     

    Posted by Shunsuke Hayashi on 2013年12月12日
    Categories javascript