JSでISO 8601型の日時表現から日本標準時での日付に変換する

JavaScript

ISO 8601型とは2023-03-02T23:59:59Zといったような日時表現の形式のことです。ここからJSで日本標準時の年月日を取得します。

サンプルコードは以下のとおりです。

const DateString = "2023-03-02T21:00:00Z";
const date = new Date(DateString);

date.setHours(date.getHours() + 9);

const Y = date.getFullYear();
const M = date.getMonth() + 1; // 月は0から始まるため
const D = date.getDate();

console.log(`${Y}年${M}月${D}日`); //2023年3月3日

2023-03-02を指定したのに2023年3月3日になったのはなぜでしょうか?それは指定した文字列の末尾をみていただければわかります。末尾の”Z”はUTCとの差がゼロであることを示しており、それすなわち世界標準時です。世界標準時の21:00は日本標準時は翌日の6時なので3月3日になっているというわけです。

もちろん、文字列で日本標準時であることを明示すればその通りに日時を取得してくれます。

const DateString = "2023-03-03T06:00:00+09:00";
const date = new Date(DateString);

date.setHours(date.getHours() + 9);

const Y = date.getFullYear();
const M = date.getMonth() + 1; // 月は0から始まるため
const D = date.getDate();

console.log(`${Y}年${M}月${D}日`); //2023年3月3日

このようにすれば最初からJSTなのでそのまま日付が取得できます。