Open2

dayjsにsetFullYearがない?

Tsuyoshi HiguchiTsuyoshi Higuchi

年月日それぞれ入力フォームがある状態で、年のフィールドに「2, 0, x...」と20xx年を入力しようとした場合、何もしなければDateクラスであってもdayjsでもあっても1900年から表記される(2+1900=1902年の様になる)が、Dateクラスであれば setFullYear(2) = 西暦2年 とできるが、dayjsの場合はsetFullYearで定義したDate型の値を渡しても1900年からという処理になる。

import dayjs from 'dayjs';

const dateObj = new Date(2,0,1); // 西暦1902年1月1日

const dateFullObj = new Date(2,0,1); // 西暦1902年1月1日
dateObj.setFullYear(2); // 西暦2年1月1日

const dayObj = dayjs(dateObj); //西暦1902年1月1日
const dayFullObj = dayjs(dateFullObj); //西暦1902年1月1日 *dayObjと同じ結果になる
Tsuyoshi HiguchiTsuyoshi Higuchi

要件によるが、例えば「会社の設立日」といったものを扱う際、1900年以前からある会社の日付バリデーションとして比較処理(特にx年以降かなど)dayjsで処理(ex: dayjs().isBefore(dayjs([1900,0,1])))できるものがうまく機能しなくなる。