日付の入力フォームに「バリデーションを実装している時のこと。
Safariだけ、存在しない値を入力してもバリデーションに通ってしまうという謎現象に遭遇。
結論
フォーマット時の書き方をSafariに合わせる必要がある
❌ var now = moment("2022 5 20").format("YYYY-MM-DD");
⭕️ const valDate = moment("2022 5 20", "YYYY MM DD").format("YYYY/MM/DD");
現象
例えば "1999年9月90日" と入力された際、このような日付は存在しません。
今回、moment.js のisInvlid関数を使用して、日付の存在チェックを行っていたのですが、
何故かSafariではこの日付が存在することになってしまうのでした。(怖)
consoleにフォーマット後の値を出してみたところ、以下の値が。
Date: 1999/11/29
なるほどフォーマットがうまくいってない。全然違う値が返ってきてるやないかいっっ
90日分足しちゃったんですね〜、
調べる過程で、SafariのDate関係が他ブラウザと違う動きをするというのは有名な話ということを知りました。
無知の知。