LoginSignup
28
12

More than 3 years have passed since last update.

dayjsで存在しない日付をバリデーションする

Posted at

moment.jsをお使いの皆さんにはisValid関数があるじゃんとお思いでしょう。
dayjsはmoment.jsのAPIと高い互換性を持ちますがこの関数に関しては挙動が異なるみたいです。

dayjs('2020/02/31', 'YYYY/MM/DD').isValid() // true
moment('2020/02/31', 'YYYY/MM/DD').isValid() // false

dayjsではフォーマットが可能かどうかだけを判断してるみたいで、日付が存在するかは判定してない。
なので以下のようなメソッドを作ることで日付の存在をチェックできます。

const validate = (date, format) => {
  return dayjs(date, format).format(format) === date;
}
validate('2020/02/31', 'YYYY/MM/DD') // false

なぜこれで判定ができるのかというと、dayjsはフォーマットを行うと2020/02/312020/03/02に変換されます。
なので、もとの値と比較してズレていると存在しない日付という判定が行えるということでした。

28
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
12