LoginSignup
1
0

More than 1 year has passed since last update.

JavaScript ISO8601形式の日時表記を生成

Last updated at Posted at 2020-07-17

単純にDate()オブジェクトのtoISOString()メソッドを使えばISO8601形式の日時を返してくれますが、これはどの地域で実行してもZ(UTC)で返ってきますので、地域に合わせたオフセット付きの表記で返すメソッドを書いてみました。

Date.prototype.iso8601 = function() {
    if(isNaN(this)) return this;
    const d = new Date(this - this.getTimezoneOffset() * 6e4);
    return d.toISOString().slice(0, -5) +
           d.toString().match(/[-+]..../)[0].replace(/(..)$/, ':$1');
}

example
// 現在日時
console.log( new Date().iso8601() ); // 2020-07-17T14:31:50+09:00
// 任意日時
console.log( new Date('2020/01/01 00:00:00').iso8601() ); // 2020-01-01T00:00:00+09:00
console.log( new Date(1234567890123).iso8601() ); // 2009-02-14T08:31:30+09:00
console.log( new Date(0).iso8601() ); // 1970-01-01T09:00:00+09:00

他のメソッドとの表記の比較および日時としては同一かの検証

const date = new Date('2020/01/01 00:00:00');
const time = date.getTime();
console.log(time);
const a = [];
console.log( a[0] = date.toString() );
console.log( a[1] = date.toISOString() );
console.log( a[2] = date.iso8601() );
console.log( new Date(a[0]).getTime() );
console.log( new Date(a[1]).getTime() );
console.log( new Date(a[2]).getTime() );

結果

00.jpg

順に、
(1) '2020/01/01 00:00:00' のUNIX時間基準のミリ秒(時差が考慮されますので地域によって変わります)

(2) .toString()を追加したもの
(3) .toISOString()を追加したもの
(4) .iso8601()を追加したもの

(5) (2)を初期値として.getTime()を通したもの
(6) (3)を初期値として.getTime()を通したもの
(7) (4)を初期値として.getTime()を通したもの

(2)~(4)のそれぞれの表記は違っても、(1)と(5)~(7)が同一であればそれぞれ同じ日時ということです。


日本以外の地域でもその地域に合わせたタイムゾーンで表示されるか、またそれが日時として正しい結果かを確認してみます。

JavaScriptではPHPのdate_default_timezone_set()のようなスクリプト内で使用されるデフォルトタイムゾーンを変更する手段は無いようなので、直接OSのタイムゾーン設定を変えて確認。
OSのタイムゾーン設定を変更すると他の多くのプロセスの動作にも影響が出る可能性がありますので、あまりやらないほうがよいです。

01.jpg
02.jpg
03.jpg
04.jpg
05.jpg
06.jpg
07.jpg

アデレートはUTC+09:30であるのに結果が+10:30となっているのは、サマータイムが反映されているためです。
(1月の日付で検証しているのにサマータイムが反映されているのは南半球にある地域のため)

08.jpg
09.jpg


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0