toLocaleStringでISOに近いフォーマットにしたいときはlocaleをsv-SEにする

1 min read読了の目安(約800字

こちらの記事で下記のような形でtoLocaleStringを利用すると割と扱いやすいことを紹介した

> new Date().toLocaleString("ja-JP")
'2020/9/19 22:29:16'

しかしja-JPの場合、月のフォーマットが二桁で無く一桁になってしまう。これは機械的に扱う場合にちょっと厄介だ。

そこでISO 8601に近い二桁になるフォーマットが無いか調べると、スウェーデンのlocaleであるsv-SEがあることを発見した

> new Date().toLocaleString("sv-SE")
'2020-09-19 22:29:46'

タイムゾーンは無いものの、確かにスッキリしている。スウェーデン最高。

利用例

例えばこんな具合にreplaceを組み合わせると色々とフォーマットが使えて便利

> new Date().toLocaleString("sv-SE", { timeZone: "Asia/Tokyo" })
  .replace(/[^0-9]/g,"")
'20200919223442'

> new Date().toLocaleString("sv-SE",  { timeZone: "Asia/Tokyo" })
  .replace(/:/g,"_")
  .replace(/\s/,"+")
'2020-09-19+22_40_02'

参考

https://stackoverflow.com/questions/25050034/get-iso-8601-using-intl-datetimeformat