javascriptでn時間後を求める (GPSの日付時刻データをJSTに変換する)

GPSの日付時刻はUTC(Coordinated Universal Time)ベースで記録されているが、表示する際にはローカルベースすなわちJST(Japan Standard Time)に変換する。

  • 文字列形式に変換
  • NEMA0183フォーマットでは、日付は DDMMYY形式、時刻は hhmmss形式になっているので、これを表示のことを考えて、YYYY/MM/DD,hh:mm:dd形式に変換する。直接Javascriptの日付オブジェクトにしてもいいのだが、ブラウザによって挙動が微妙に違っていたり、演算のことを考えて文字列で扱う。(この形式であればDateオブジェクトへの変換は極めて簡単。)

    // DDMMYY形式 (例)1994年11月19日 → [NMEA]191194 → [dateStr] "1994:11:19"
    function gpsDate2dateStr(s){
        var yy = '20' + s.substring(4,6);
        var mm = s.substring(2,4);
        var dd = s.substring(0,2);
        return (yy + '/' + mm + '/' + dd);
    }
    // hhmmss形式 (例)22:54:46 → [NMEA] 225446.000 → [timeStr] "22:54:46"
    function gpsTime2timeStr(s){
        var hh = s.substring(0,2);
        var mm = s.substring(2,4);
        var ss = s.substring(4,6);
        return (hh + ':' + mm + ':' + ss);
    }
    
  • UTCからJSTに変換する
  • UTCからJSTに変換するには+9時間する。javascriptのDateオブジェクトは、内部的に1970年1月1日を基準としたミリ秒で表されている(*)ので、9時間後を得るには、もとのDateオブジェクトに
    ・1000 * 60(sec) * 60(min) * 9(hour) = 32400000
    を加えてやればよい。
    (*) Date.getTime() で取得、Date.setTime() で設定できる。

    function dateTimeStr2dateJST(dateStr,timeStr){
        var d = new Date(dateStr + ' ' + timeStr);
        d.setTime(d.getTime() + 32400000); // 1000 * 60 * 60 * 9(hour)
        return d;
    }
    

    この方法は、n秒後、n分後、n日後などに応用できる。

  • Date.localString()を利用する
  • 今回は使っていないが、文字列に変換するだけなら、Date.localString()も使える。

カテゴリー: Tips タグ: , パーマリンク