Skip to the content.

0003. endDate は inclusive で保存し、ResourceTimeline 境界で adapter 変換する

Context

Assignment には startDate / endDate がある (例: 「5/1 から 5/31 まで」)。 ところが @tommykey-apps/ui-componentsResourceTimelineend-exclusive を要求する (5/1〜5/31 表示なら endDate = new Date(2026, 5, 1) = 6/1)。

検討すべき選択肢:

人間の自然な「5/1 から 5/31」入力を内部で sentinel value (6/1) に変換するのは混乱の温床。一方、timeline ライブラリの規約は変えられない。

Decision

全層 inclusive 統一endDate = "2026-05-31" が「5/31 を含む最後の日」を意味する。

ResourceTimeline 境界 (web/src/lib/timeline-adapter.ts) で 2 箇所だけ ±1 day 変換する:

DB 保存: YYYY-MM-DD string (Asia/Tokyo の暦日)。Date.toISOString().slice(0, 10) は UTC ベースで JST と日付がずれる可能性があるため、web/src/lib/timeline-adapter.tsformatLocalDate(d) で自前 zero-pad 実装する。

Consequences

Positive

Negative

Neutral

Alternatives considered

References

Superseded note (2026-05-08)

業界標準 (RFC 5545 / Google Calendar API / PostgreSQL daterange / Java / Rust / Python / Bryntum) との整合 および adapter から ±1 day を削除するため、本 ADR は ADR 0004 で置き換えられた。

新規約の概要: