diff --git a/frontend/src/components/PlayerModal.tsx b/frontend/src/components/PlayerModal.tsx index 0448c15..5f48ee3 100644 --- a/frontend/src/components/PlayerModal.tsx +++ b/frontend/src/components/PlayerModal.tsx @@ -201,8 +201,17 @@ export default function PlayerModal({ onClose: () => void; onState: (id: string, status: string) => void; }) { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const qc = useQueryClient(); + // Precise upload date shown inline after the relative time (e.g. "9 yr ago · 12 Jan 2017"). + const fullDate = (d: string | null | undefined) => + d + ? new Date(d).toLocaleDateString(i18n.language, { + year: "numeric", + month: "short", + day: "numeric", + }) + : ""; // Track the playing item by id (not a frozen index) so it survives the queue changing // under us — e.g. an item removed in another tab. The index is derived from the *live* // queue, so the N / M counter and prev/next neighbours stay correct without disrupting @@ -550,7 +559,10 @@ export default function PlayerModal({ {active.view_count != null && ( · {t("player.views", { count: active.view_count, formattedCount: formatViews(active.view_count) })} )} - · {relativeTime(active.published_at)} + + · {relativeTime(active.published_at)} + {active.published_at && ` · ${fullDate(active.published_at)}`} + {active.duration_seconds != null && ( · {formatDuration(active.duration_seconds)} )} @@ -566,7 +578,11 @@ export default function PlayerModal({ {detail.data?.view_count != null && ( · {t("player.views", { count: detail.data.view_count, formattedCount: formatViews(detail.data.view_count) })} )} - {detail.data?.published_at && · {relativeTime(detail.data.published_at)}} + {detail.data?.published_at && ( + + · {relativeTime(detail.data.published_at)} · {fullDate(detail.data.published_at)} + + )} {detail.data?.duration_seconds != null && ( · {formatDuration(detail.data.duration_seconds)} )}