date-fns について
date-fnsは、date-fns v4とタイムゾーン関連パッケージを扱うためのエージェントスキルです。導入済みバージョンとタイムゾーン要件に応じた変更方法を案内し、関連ドキュメントと検証手順を示します。
主な機能
- 01date-fns v4の日付操作ガイド
- 02フォーマットと解析の推奨事項
- 03タイムゾーンとDSTの処理ガイド
- 04FPモード、ロケール、TypeScriptの案内
- 05移行と検証のチェックリスト
活用シーン
- 01カレンダー計算に使うdate-fns APIの選定
- 02UTCまたはIANAタイムゾーンの処理
- 03日付のフォーマットと解析コードの確認
- 04date-fnsのバージョン移行の計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill date-fnsインストール後、Claude Code で/date-fnsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/format-parse.mdfp-locales-types.mdmanipulate-compare.mdmigration-pitfalls.mdsetup-core.mdsource-map.mdtimezones.md詳細
date-fns
date-fns v4 の日付計算、書式設定、解析、FP モード、ロケール、公式タイムゾーンパッケージ @date-fns/tz/@date-fns/utc には、このスキルを使用してください。
ワークフロー
- コードを変更する前に、ローカル環境を確認します。
- パッケージ:
date-fns、任意で@date-fns/tz、@date-fns/utc(存在する場合はレガシーのdate-fns-tzも)。 - バージョン:第一級の
{ in }/TZDate/UTCDate相互運用には、date-fns ≥ 4 を優先します。v3 もよく使われていますが、date-fns-tzを使わない限り、ローカル環境のみでの利用となります。 - タイムゾーンの用途:システムローカルの UI、UTC に正規化したサーバー側の計算、または名前付き IANA タイムゾーン(ユーザー/会場/本社)。
- インポート:
"date-fns"、"date-fns/fp"、"date-fns/locale/*"、"date-fns/constants"から名前付きでインポートします。
- パッケージ:
- バージョンが不明確な場合や、タイムゾーン、Unicode トークン、SSR、メジャーアップグレードに関わる作業では、ドキュメントを更新します。source-map.md から始めてください。
- 詳細の参照先:
- インストール、インポート、基本概念、Invalid Date:setup-core.md。
format/parse/parseISO、Unicode トークン:format-parse.md。- 加算/設定/境界、差分、Interval、Duration:manipulate-compare.md。
TZDate、UTCDate、tz/utc、transpose、DST、SSR:timezones.md。- FP、ロケール、TypeScript:fp-locales-types.md。
- v2→v3→v4 および
date-fns-tzの移行:migration-pitfalls.md。
- プロジェクトでインストールされているメジャーバージョンと既存のインポートスタイルに合わせます。タイムゾーンの意味論上必要でない限り、
@date-fns/tzや@date-fns/utcを追加しないでください。 - 型チェックに加え、該当する場合は Invalid Date、暦日単位と経過時間単位の差分、タイムゾーン/SSR の境界ケースに絞ったテストで検証します。
タイムゾーンの判断ツリー
System-local calendar / host TZ only?
→ plain Date + date-fns
UTC-only math (server day, charts, no IANA zones)?
→ @date-fns/utc (UTCDate / UTCDateMini or { in: utc })
Named IANA zone or multi-zone product?
→ @date-fns/tz (TZDate / TZDateMini or { in: tz("…") })
Stuck on date-fns v3?
→ upgrade to v4 + official packages, or use legacy date-fns-tz until then
基本的な判断基準
- 素の date-fns はシステムローカルであり、UTC ライブラリではありません。ローカル以外の暦日フィールドには
@date-fns/utcまたは@date-fns/tzを使用します。 - 名前付きインポートを優先します。定数はメインのバレルではなく、
"date-fns/constants"からインポートします。 formatの前に必ずisValidを実行します。formatは Invalid Date に対してRangeErrorをスローします。- Unicode トークンには
yyyy-MM-ddを使用し、Moment 形式のYYYY-MM-DD/DD(週番号基準の年/年内の日)は使用しないでください。format-parse.md を参照してください。 parseISO("YYYY-MM-DD")→ ローカルの午前 0 時、new Date("YYYY-MM-DD")→ UTC の午前 0 時です。混同しないでください。- 暦日については
differenceInCalendar*を、経過した完全な単位についてはdifferenceIn*を優先します。 - タイムゾーンが混在する場合やプリミティブ値を使う場合は、
{ in: tz("…") }または{ in: utc }でコンテキストを固定します。指定がない場合、最初のオブジェクトのDate/拡張型の引数が優先され、引数の順序によって日付計算の結果が変わることがあります。 new TZDate(iso, zone)とレガシーのtoZonedTimeは異なります。同じ瞬間を表しますが、壁時計上の時刻は異なります。壁時計の時刻を再マッピングするにはtransposeを使用します。- ライブラリ境界では 完全版の
TZDate/UTCDateを優先します。Mini バリアントでは、ゾーン対応のtoString/ロケール書式設定関数が省かれます(システムタイムゾーンが漏れる原因になります)。 @date-fns/tzとサードパーティ製のdate-fns-tzを混同しないでください。
検証
リポジトリで定義されているコマンドを優先します。該当する項目を確認してください。
bun pm ls date-fns @date-fns/tz @date-fns/utc(移行する場合はdate-fns-tzも)。DateArg、オプションの型、拡張型の戻り値の型を型チェックします。- テスト:有効/無効な解析、Unicode トークン、暦日単位と経過時間単位の差分、逆順の区間、DST の春の時刻変更/秋の時刻変更、
{ in }と引数順によるタイムゾーン選択。 - SSR/ハイドレーションのスモークテスト:サーバー(多くの場合 UTC)とクライアント(ローカル)で「今日」やローカル日の境界をまたいで書式設定する場合。
実行した検査と実行しなかった検査、残っているバージョン上の前提を報告してください。
コメント
Markdown 対応