import { AppProvider } from "@godxjp/ui/app"; import { formatDate } from "@godxjp/ui/datetime"; import { Text } from "@godxjp/ui/general"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, Descriptions, } from "@godxjp/ui/data-display"; import { Flex, PageContainer } from "@godxjp/ui/layout"; /** * formatDate · MANDATORY date/time display function from @godxjp/ui/datetime. * Reads locale, timezone, dateFormat, and timeFormat from AppProvider context. * NEVER call date-fns or Intl.DateTimeFormat directly; use formatDate instead. * Composed only from real @godxjp/ui components. All inputs are fixed ISO strings. */ const ISO_DATE = "2024-04-12"; const ISO_DATETIME = "2024-04-12T09:30:00+09:00"; const HH_MM = "09:30"; const PAST_DATETIME = "2024-01-15T14:45:00+09:00"; const NULL_VALUE = null; export default function Demo() { return ( {/* Overview */} 概要 formatDate は @godxjp/ui/datetime からインポートする関数。 AppProvider の locale / timezone / dateFormat / timeFormat を読み取り、 null / undefined を渡すと em-dash (—) を返す。 date-fns や Intl.DateTimeFormat を直接呼ばないこと。 このデモは{" "} defaultLocale="ja" defaultTimezone="Asia/Tokyo" defaultDateFormat="iso" defaultTimeFormat="24h" {" "} の AppProvider でラップされている。 {/* kind: "date" */} kind: "date" · 日付のみ ISO yyyy-MM-dd を渡すと auto で "date" と判定されるが、 kind: "date" を明示すると ISO datetime 文字列でも日付部分だけを表示できる。 {ISO_DATE} "date" {formatDate(ISO_DATE, { kind: "date" })} {/* kind: "time" */} kind: "time" · 時刻のみ HH:mm 文字列は auto-detection で "time" と判定される。 AppProvider の timeFormat (24h / 12h) に従い出力が切り替わる。 {HH_MM} "time" {formatDate(HH_MM, { kind: "time" })} {/* kind: "datetime" */} kind: "datetime" · 日時 ISO datetime 文字列を渡すと auto-detection で "datetime" と判定される。 取引タイムスタンプや更新日時の表示に使用する。 {ISO_DATETIME} "datetime" {formatDate(ISO_DATETIME, { kind: "datetime" })} {/* kind: "long" */} kind: "long" · 長形式 (PPP) モーダルや詳細パネルで年月日を読みやすく表示するときに使う。 ロケールに合わせた月名や曜日を含む完全形式で出力される。 {ISO_DATE} "long" {formatDate(ISO_DATE, { kind: "long" })} {/* kind: "relative" */} kind: "relative" · 相対表示 アクティビティフィードや監査ログで "3日前" のような相対表現を出力する。 ロケールに応じた文字列 (ja: "3日前" / en: "3 days ago") になる。 {PAST_DATETIME} "relative" {formatDate(PAST_DATETIME, { kind: "relative" })} {/* null / undefined handling */} null / undefined · em-dash フォールバック null / undefined / 空文字を渡すと em-dash (—) を返す。 呼び出し前に三項演算子でガードする必要はない。 null (省略) {formatDate(NULL_VALUE)} {/* Summary table */} kind オプション一覧 各 kind と対応する入力・出力の早見表。auto は入力値の形式から自動判定する。 {formatDate(ISO_DATE, { kind: "date" })} {formatDate(HH_MM, { kind: "time" })} {formatDate(ISO_DATETIME, { kind: "datetime" })} {formatDate(ISO_DATE, { kind: "long" })} {formatDate(PAST_DATETIME, { kind: "relative" })} {formatDate(ISO_DATE)} ); }