From 04cb4759358b85029e3e32a5cab6ca39cbbef744 Mon Sep 17 00:00:00 2001 From: shuaiplus Date: Wed, 8 Jul 2026 19:31:11 +0800 Subject: [PATCH] feat: enhance date formatting in PublicSendPage and SendsPage components --- src/handlers/sends-shared.ts | 10 +++++++++- webapp/src/components/PublicSendPage.tsx | 9 ++++++++- webapp/src/components/SendsPage.tsx | 11 +++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/handlers/sends-shared.ts b/src/handlers/sends-shared.ts index 535220a..c29859b 100644 --- a/src/handlers/sends-shared.ts +++ b/src/handlers/sends-shared.ts @@ -155,7 +155,15 @@ export function formatSize(bytes: number): string { export function parseDate(raw: unknown): Date | null { if (typeof raw !== 'string' || !raw.trim()) return null; - const date = new Date(raw); + let value = raw.trim(); + if (!/[zZ]$/.test(value) && !/[+\-]\d{2}:?\d{2}$/.test(value)) { + if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/.test(value)) { + value += 'Z'; + } else if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}/.test(value)) { + value = value.replace(' ', 'T') + 'Z'; + } + } + const date = new Date(value); if (Number.isNaN(date.getTime())) return null; return date; } diff --git a/webapp/src/components/PublicSendPage.tsx b/webapp/src/components/PublicSendPage.tsx index b323692..689dde1 100644 --- a/webapp/src/components/PublicSendPage.tsx +++ b/webapp/src/components/PublicSendPage.tsx @@ -53,6 +53,13 @@ function asRecord(value: unknown): Record | null { return value && typeof value === 'object' ? value as Record : null; } +function formatSendDate(value: string | null | undefined): string { + if (!value) return ''; + const parsed = new Date(value); + if (Number.isNaN(parsed.getTime())) return ''; + return parsed.toLocaleString(); +} + function optionalString(value: unknown): string | null { return typeof value === 'string' ? value : null; } @@ -283,7 +290,7 @@ export default function PublicSendPage(props: PublicSendPageProps) { )} - {!!sendData.expirationDate &&

{t('txt_expires_at_value', { value: sendData.expirationDate })}

} + {!!sendData.expirationDate &&

{t('txt_expires_at_value', { value: formatSendDate(sendData.expirationDate) })}

} )} diff --git a/webapp/src/components/SendsPage.tsx b/webapp/src/components/SendsPage.tsx index d24620c..4bb4709 100644 --- a/webapp/src/components/SendsPage.tsx +++ b/webapp/src/components/SendsPage.tsx @@ -32,6 +32,13 @@ function daysFromNow(iso: string | null | undefined, fallback: number): string { return String(Math.max(days, 0)); } +function formatSendDate(value: string | null | undefined): string { + if (!value) return t('txt_dash'); + const parsed = new Date(value); + if (Number.isNaN(parsed.getTime())) return t('txt_dash'); + return parsed.toLocaleString(); +} + function buildDefaultDraft(): SendDraft { return { type: 'text', @@ -537,8 +544,8 @@ export default function SendsPage(props: SendsPageProps) {

{t('txt_send_details')}

{t('txt_access_count')}{selectedSend.accessCount || 0}
-
{t('txt_deletion_date')}{selectedSend.deletionDate || t('txt_dash')}
-
{t('txt_expiration_date')}{selectedSend.expirationDate || t('txt_dash')}
+
{t('txt_deletion_date')}{formatSendDate(selectedSend.deletionDate)}
+
{t('txt_expiration_date')}{formatSendDate(selectedSend.expirationDate)}