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に変換するには+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()も使える。