JavaScript ISO8601形式の日時表記を生成
単純に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');
}
例
// 現在日時
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() );
結果
順に、
(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のタイムゾーン設定を変更すると他の多くのプロセスの動作にも影響が出る可能性がありますので、あまりやらないほうがよいです。
アデレートはUTC+09:30であるのに結果が+10:30となっているのは、サマータイムが反映されているためです。
(1月の日付で検証しているのにサマータイムが反映されているのは南半球にある地域のため)
Author And Source
この問題について(JavaScript ISO8601形式の日時表記を生成), 我々は、より多くの情報をここで見つけました https://qiita.com/akebi_mh/items/a60310dc44be5691742b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .