JavaScriptでISO8601形式の日付を扱う
ブラウザでもNode.jsでも同じです
もくじ
Date → ISO8601
Date
型の toISOString()
を使う
const dt = new Date(Date.UTC(1999, 6, 31));
const isoStr = dt.toISOString();
console.log(isoStr); // 1999-07-31T00:00:00.000Z
const dt = new Date(Date.UTC(1999, 6, 31));
const jdt = new Date(dt.getTime() + 9 * 60 * 60 * 1000); // 9時間ずらす
const isoStr = jdt.toISOString().split('Z')[0] + '+09:00';
console.log(isoStr); // 1999-07-31T09:00:00.000+09:00
ただし秒までしか要らない場合、自力でフォーマットする必要がある。
const toISOStringSec = (dt) => {
const pad = (val, len) => {
let p = '';
for (let i = 0; i < len; ++i) {
p += '0';
}
return (p + String(val)).slice(-1 * len);
};
const year = dt.getUTCFullYear();
const month = dt.getUTCMonth() + 1;
const days = dt.getUTCDate();
const hours = dt.getUTCHours();
const minutes = dt.getUTCMinutes();
const seconds = dt.getUTCSeconds();
return `${year}-${pad(month, 2)}-${pad(days, 2)}T${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}Z`;
};
const dt = new Date(Date.UTC(1999, 6, 31));
const isoStr = toISOStringSec(dt);
console.log(isoStr); // 1999-07-31T00:00:00Z
ISO8601 → Date
Date.parse()
を使う
const ts = Date.parse('1999-07-31T00:00:00.000Z');
console.log(ts); // 933379200000
const dt = new Date(ts);
const ts = Date.parse('1999-07-31T09:00:00.000+09:00');
console.log(ts); // 933379200000
const dt = new Date(ts);
こちらはミリ秒がついててもついてなくても変換できる
const ts = Date.parse('1999-07-31T00:00:00Z');
console.log(ts); // 933379200000
const dt = new Date(ts);