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()も使える。