概要
safariで、
new Date('2023-03-01 12:02:31')
のようなコードを書くと、Invalid Dateが発生することがあります
結論
ISO 8601(基本/拡張形式)に従ったフォーマットを指定しましょう
new Date('2023-03-01T12:02:31') // 拡張形式に準拠して、日付と時刻の間に区切り文字Tを挿入
理由
ググると、safariでは日付の形式にハイフン使ってはいけないのでスラッシュ「/」を使いましょうみたいな解説の記事が多いですが、「ISO 8601に準拠していない形式では、動作が保証されていない」が正確だと思われます。
Date コンストラクターで日付文字列を解釈する際には、常に入力が ISO 8601 形式 (YYYY-MM-DDTHH:mm:ss.sssZ) であることを確認してください。他の形式で解釈した場合には、その挙動は実装によって定義されていて、すべてのブラウザーで動くとは限りません。
ISO 8601に準拠するべきと覚えておくと、同様に以下のようなフォーマットでエラーが発生した場合の理解や対処がスムーズになると思います。
new Date('2023-3-21T12:01:13') // 月がMM形式になっていない new Date('2023-03-21T12.01.13') // 時刻がコロン「:」形式でない
日付の区切り文字がスラッシュ「/」でも多くのブラウザで動くのは、実装依存によるものでJavascriptとしての仕様によるものではないはずです。