diff --git a/frontend/src/components/About.tsx b/frontend/src/components/About.tsx index 9da74868..7eb4078e 100644 --- a/frontend/src/components/About.tsx +++ b/frontend/src/components/About.tsx @@ -4,13 +4,14 @@ import { useTranslation } from "react-i18next"; import { Info, Sparkles } from "lucide-react"; import { api } from "../lib/api"; import { FRONTEND_VERSION, FRONTEND_SHA, FRONTEND_BUILD_DATE } from "../lib/version"; +import { formatDateTime } from "../lib/format"; import { Button } from "./ui/Button"; import Modal from "./ui/Modal"; function fmtDate(d?: string | null): string { if (!d) return "—"; const t = new Date(d); - return isNaN(t.getTime()) ? d : t.toLocaleString(); + return isNaN(t.getTime()) ? d : formatDateTime(d); } // About dialog: app + build + schema versions (frontend/backend/database), plus a diff --git a/frontend/src/components/AdminUsers.tsx b/frontend/src/components/AdminUsers.tsx index 833b8052..28495f6e 100644 --- a/frontend/src/components/AdminUsers.tsx +++ b/frontend/src/components/AdminUsers.tsx @@ -431,7 +431,7 @@ function PendingAccessRowView({ {row.created_at && ( {t("users.pendingAccess.signedUp", { - time: new Date(row.created_at).toLocaleString(), + time: formatDateTime(row.created_at), })} )} @@ -619,7 +619,10 @@ function AdminInvites() { inv.invited_at ? "settings.invites.inviteConfirmAgain" : "settings.invites.inviteConfirm", - { email: inv.email, time: new Date(inv.invited_at ?? 0).toLocaleString() }, + { + email: inv.email, + time: formatDateTime(inv.invited_at ?? new Date(0).toISOString()), + }, )}

(lang = v)} /> @@ -718,7 +721,7 @@ function AdminInvites() { hint={ i.invited_at ? t("settings.invites.invitedAt", { - time: new Date(i.invited_at).toLocaleString(), + time: formatDateTime(i.invited_at), }) : t("settings.invites.inviteHint") } @@ -916,7 +919,7 @@ function InviteRow({ {inv.requested_at && (
{t("settings.invites.requested", { - time: new Date(inv.requested_at).toLocaleString(), + time: formatDateTime(inv.requested_at), })}
)} diff --git a/frontend/src/components/ShareDialog.tsx b/frontend/src/components/ShareDialog.tsx index bae70fc6..a9caf014 100644 --- a/frontend/src/components/ShareDialog.tsx +++ b/frontend/src/components/ShareDialog.tsx @@ -9,6 +9,7 @@ import { useConfirm } from "./ConfirmProvider"; import { notify } from "../lib/notifications"; import { notifyActionError } from "../lib/actionErrors"; import { copyText } from "../lib/clipboard"; +import { formatDate } from "../lib/format"; import { api, type DownloadJob, type ShareLink } from "../lib/api"; import { inputCls } from "./ui/form"; import { Button } from "./ui/Button"; @@ -88,7 +89,7 @@ function UserShare({ job }: { job: DownloadJob }) { // --- share by public link ------------------------------------------------------------------- function LinkRow({ link, onChanged }: { link: ShareLink; onChanged: () => void }) { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const confirm = useConfirm(); const [copied, setCopied] = useState(false); const [editPass, setEditPass] = useState(false); @@ -130,7 +131,7 @@ function LinkRow({ link, onChanged }: { link: ShareLink; onChanged: () => void } if (link.allow_download) badges.push(t("downloads.share.downloadable")); if (link.expires_at) badges.push( - t("downloads.share.expiresOn", { date: new Date(link.expires_at).toLocaleDateString() }), + t("downloads.share.expiresOn", { date: formatDate(link.expires_at, i18n.language) }), ); return ( diff --git a/frontend/src/components/downloadRow.tsx b/frontend/src/components/downloadRow.tsx index 23699847..60570395 100644 --- a/frontend/src/components/downloadRow.tsx +++ b/frontend/src/components/downloadRow.tsx @@ -7,7 +7,14 @@ import { useLiveQuery } from "../lib/useLiveQuery"; import { api, type DownloadJob } from "../lib/api"; import { notify } from "../lib/notifications"; import { copyText } from "../lib/clipboard"; -import { formatBytes, formatDuration, formatEta, formatSpeed, relativeTime } from "../lib/format"; +import { + formatBytes, + formatDateTime, + formatDuration, + formatEta, + formatSpeed, + relativeTime, +} from "../lib/format"; import { navItemAttrs } from "../lib/listNav"; import { failCopyKeys } from "../lib/downloadFailure"; @@ -250,7 +257,7 @@ export function DownloadRow({ {job.status === "done" && job.created_at ? ( · {relativeTime(job.created_at)}