You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.8 KiB
37 lines
1.8 KiB
/* ──────────────────────────────────────────────────────────────────────────
|
|
* تبدیل تاریخهای میلادیِ بکاند (ISO datetime) به نمایشِ جلالی (هجری شمسی).
|
|
*
|
|
* بکاند فیلدهای updated_at/created_at را بهصورت ISO (UTC) میفرستد؛ کاربر باید
|
|
* تاریخ را به تقویم جلالی ببیند. از `Intl.DateTimeFormat` با تقویم `persian`
|
|
* استفاده میکنیم (بدون وابستگیِ خارجی) و ارقام را فارسی نمایش میدهیم.
|
|
* ────────────────────────────────────────────────────────────────────────── */
|
|
|
|
const DATE_FMT = new Intl.DateTimeFormat('fa-IR-u-ca-persian', {
|
|
year: 'numeric',
|
|
month: '2-digit',
|
|
day: '2-digit',
|
|
})
|
|
|
|
const DATE_TIME_FMT = new Intl.DateTimeFormat('fa-IR-u-ca-persian', {
|
|
year: 'numeric',
|
|
month: '2-digit',
|
|
day: '2-digit',
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
})
|
|
|
|
/** تاریخ ISO → «۱۴۰۳/۰۱/۲۵» (جلالی). ورودی خالی/نامعتبر → '—'. */
|
|
export function toJalali(iso: string | null | undefined): string {
|
|
if (!iso) return '—'
|
|
const d = new Date(iso)
|
|
if (Number.isNaN(d.getTime())) return '—'
|
|
return DATE_FMT.format(d)
|
|
}
|
|
|
|
/** تاریخ ISO → «۱۴۰۳/۰۱/۲۵، ۱۴:۳۰» (جلالی + ساعت). ورودی نامعتبر → '—'. */
|
|
export function toJalaliDateTime(iso: string | null | undefined): string {
|
|
if (!iso) return '—'
|
|
const d = new Date(iso)
|
|
if (Number.isNaN(d.getTime())) return '—'
|
|
return DATE_TIME_FMT.format(d)
|
|
}
|