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>.000ZInvalid Date
Date.parse(”12-22”)1008946800000NaN

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/
作者
hrdtbs
公開日
2023-11-24
ライセンス
CC BY-NC-SA 4.0