2014-05-01T20:45:20+09:00
のようにYYYY-MM-DDThh:mm:ss+09:00
形式をJavascriptで作成したい。この形式はwikipediaによるとISO8601の拡張形式らしい。ともあれAPIなどでよく利用されている形式であり、2017/02/09などとWebサイトに書いておくと、googleの検索エンジンが拾ってくれて検索結果のスニペット横等に表示してくれて便利である。
下記のようなコードで取り敢えず作成したのでメモ
const date = new Date();
addZero = function(time) {
return ("0" + time).slice(-2);
}
const ISO8601Date = date.getFullYear() + "-" +
addZero(date.getMonth() + 1) + "-" +
addZero(date.getDate()) +
"T" +
addZero(date.getHours()) + ":" +
addZero(date.getMinutes()) + ":" +
addZero(date.getSeconds()) + "+" +
addZero(date.getTimezoneOffset()/(-60)) + ":00";
console.log(ISO8601Date);
addZero関数は,0を足した後にslice(-2)をして後ろの2つの数字を返却することで、一桁の数値ならば05など最初にゼロがつけ、2桁以上の数値ならば0をつけない関数である。また、getTimezoneOffset()では日本では-540が返ってくる。これは日本がUTC(協定世界時)よりも540分進んでいる事を意味する。よってタイムゾーンの差を分から時間に直し、さらにISO8601では正負の記号のつけ方が逆なので(-60)で割ってやる。
結果2017-05-14T21:26:49+09:00
などと出力される。
ところで、UTC(協定世界時)と私が小学校か中学校で習ったGMT(グリニッジ標準時)はどう違うのか気になったので調べてみた。最初GMTが標準的に使われていたらしいが、原子時計だかの発明で時間が正確に図れるようになった結果、地球の自転の速度が時によって変化するということが分かった。その速度の変化を調節するためにうるう秒が使われるらしいが、UTCはその変化に追従する世界標準時らしく、最近はGMTに変わってほぼデファクトとなっているらしい。まあGMTのより正確なものぐらいに考えておけば取り敢えずは良さそうではある。