

dayjsでタイムゾーン付きのISO 8601を取りたいならformat()、toISOString()じゃない
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
セットアップ
utc/timezoneプラグインはdayjs本体に同梱されている。別パッケージのインストールは不要で、dayjs/plugin/utc・dayjs/plugin/timezoneから読み込むだけでいい。
npm install dayjsAsia/Tokyoの現在時刻をISO 8601で取得する
オフセット付きのISO 8601形式が欲しいならformat()を使う。引数なしのformat()はデフォルトでYYYY-MM-DDTHH:mm:ssZ(ここでのZはリテラルではなくオフセット表記)を返す。
import dayjs from 'dayjs';import utc from 'dayjs/plugin/utc';import timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);dayjs.extend(timezone);
const nowInTokyo: string = dayjs().tz('Asia/Tokyo').format();
console.log(nowInTokyo);// 例: 2024-05-21T21:34:12+09:00フォーマットを固定したい場合は明示的に指定してもいい。
const nowInTokyo: string = dayjs().tz('Asia/Tokyo').format('YYYY-MM-DDTHH:mm:ssZ');toISOString()との違い
toISOString()はDate.prototype.toISOString()と同じ挙動で、常にUTC(末尾Z)を返す。.tz('Asia/Tokyo')で変換した後に呼んでも、タイムゾーンのオフセットは反映されない。
使い分け
- UTCで保存・比較したい(DB、ログ、API間のやり取り) →
toISOString()か.utc().format() - 人間が見るタイムゾーン付き表示が欲しい →
.tz(zone).format()