JavaScript: 日時をフォーマットしたい

2026年2月9日
1 分

new Date() で作った Date オブジェクトをISO形式にフォーマットしたい。

const today = new Date()

単純に文字列にフォーマットするには、toString メソッドでいい。

today.toString()
//=> 'Mon Feb 09 2026 20:46:41 GMT+0900 (日本標準時)'

JavaScript の Date オブジェクトには toISOString メソッドがあるけど、これだとタイムゾーンが消えて UTC になってしまう。

today.toISOString()
//=> '2026-02-09T11:46:41.476Z'

調べたところフォーマットする方法はほかにもあるようだけど、yyyy-dd-mm みたいな書式指定できる方法はないようだった。探せば便利なパッケージがあるのかもしれないけど。

しかたがないので、不格好だけど関数を書いた。タイムゾーンのオフセットは +09:00 に決め打ちだ。

const formatDateTime = (dt) => {
    const year = String(dt.getFullYear())
    const month = String(dt.getMonth() + 1).padStart(2, '0')
    const date = String(dt.getDate()).padStart(2, '0')
    const dateString = [year, month, date].join('-')

    const hour = String(dt.getHours()).padStart(2, '0')
    const minute = String(dt.getMinutes()).padStart(2, '0')
    const second = String(dt.getSeconds()).padStart(2, '0')
    const timeString = [hour, minute, second].join(':')

    return `${dateString}T${timeString}+09:00`
}

実行すると、こうなる。

formatDateTime(today)
//=> '2026-02-09T20:46:41+09:00'