228 文字
1 分
Q. Day.jsのisValidメソッドの日付判定が緩い
Q. 日付のバリデーション機能が緩い
ユーザー入力による 12-22 のような日付がバリデーションを突破してしまい、その後 dayjs に渡されると 2001-12-22 として解釈されてしまう。
日付のバリデーションには内部的に Date.parse を利用していた。
A.
V8 環境の Date.parse や new Date の解析は非常に緩いため、利用を避けた方が良い。
V8 (Chrome, Node, Deno) | JavaScriptCore (Safari) | |
---|---|---|
new Date(”12-22”) | 2001-12-21T15:00<00>00>.000Z | Invalid Date |
Date.parse(”12-22”) | 1008946800000 | NaN |
ISO 8601 に従ったもののみを日付として認識してほしいが、まず ISO 8601 を簡略化した書式に従って解析を行い、実装固有の解析にフォールバックすると仕様にある。
https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date.parse
https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date-time-string-format
Date.parse、new Date は環境によって異なり且つ V8 環境で緩すぎるため、基本的に利用しない方が良い。ライブラリを追加して良ければ date-fns などを利用すると良い。
Q. Day.jsのisValidメソッドの日付判定が緩い
https://blog.ohirunewani.com/posts/q-date-parse-ni-hizuke-no-baridetion-ni-riyou-suru-no-wo-sakeru/