ISO形式で日本時間
JSビルトインの Date オブジェクトのみで、ISO8601形式(例:2004-04-01T00:00:01+09:00)を日本時間で取得する。意外と簡単ではなかったので、記載しておく。
ライブラリ使えるなら使った方が良いです。moment.jsとか。
moment.jsならこんなに簡単(ES6)
moment.js
import moment from 'moment'
const now = moment().format() // 2020-04-22T22:14:25+09:00
const now2 = moment().format('YYYY-MM-DDTHH:mm') // 2020-04-22T22:14:25
ライブラリを使わず、Dateオブジェクトで同様のことを行う
ただいま、日本時間で 2020/4/22 22:39:03 だとします。"2020-04-22T22:39:03+09:00" を取得します。
date.js
// ローカル現在時刻の取得
const nowLocal = new Date() // Wed Apr 22 2020 22:39:03 GMT+0900 (Japan Standard Time)
// UTCとローカルタイムゾーンとの差を取得し、分からミリ秒に変換
const diff = nowLocal.getTimezoneOffset() * 60 * 1000 // -540 * 60 * 1000 = -32400000
// toISOString()で、UTC時間になってしまう(-9時間)ので、日本時間に9時間足しておく
const plusLocal = new Date(nowLocal - diff) // Thu Apr 23 2020 07:39:03 GMT+0900 (Japan Standard Time)
// ISO形式に変換(UTCタイムゾーンで日本時間、というよくない状態)
let iso = plusLocal.toISOString() // "2020-04-22T22:39:03.397Z"
// UTCタイムゾーン部分は消して、日本のタイムゾーンの表記を足す
iso = iso.slice(0, 19) + '+09:00' // "2020-04-22T22:39:03+09:00"
もっと簡単な方法があったら教えてください。