fix: show absolute date/time in jobs "created" column

Replace relative time formatting (which incorrectly showed "just now"
for many jobs due to negative time diffs from server/client timezone
mismatch) with absolute locale-formatted date/time.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-22 06:31:37 +01:00
parent 08f0397029
commit 24763bf5a7

View File

@@ -40,34 +40,21 @@ function formatDuration(start: string, end: string | null): string {
return `${Math.floor(diff / 3600000)}h ${Math.floor((diff % 3600000) / 60000)}m`; return `${Math.floor(diff / 3600000)}h ${Math.floor((diff % 3600000) / 60000)}m`;
} }
function getDateParts(dateStr: string): { mins: number; hours: number; useDate: boolean; date: Date } {
const date = new Date(dateStr);
const now = new Date();
const diff = now.getTime() - date.getTime();
if (diff < 3600000) {
const mins = Math.floor(diff / 60000);
return { mins, hours: 0, useDate: false, date };
}
if (diff < 86400000) {
const hours = Math.floor(diff / 3600000);
return { mins: 0, hours, useDate: false, date };
}
return { mins: 0, hours: 0, useDate: true, date };
}
export function JobsList({ initialJobs, libraries, highlightJobId }: JobsListProps) { export function JobsList({ initialJobs, libraries, highlightJobId }: JobsListProps) {
const { t, locale } = useTranslation(); const { t, locale } = useTranslation();
const [jobs, setJobs] = useState(initialJobs); const [jobs, setJobs] = useState(initialJobs);
const formatDate = (dateStr: string): string => { const formatDate = (dateStr: string): string => {
const parts = getDateParts(dateStr); const date = new Date(dateStr);
if (parts.useDate) { if (isNaN(date.getTime())) return dateStr;
return parts.date.toLocaleDateString(locale); const loc = locale === "fr" ? "fr-FR" : "en-US";
} return date.toLocaleString(loc, {
if (parts.mins < 1) return t("time.justNow"); day: "2-digit",
if (parts.hours > 0) return t("time.hoursAgo", { count: parts.hours }); month: "2-digit",
return t("time.minutesAgo", { count: parts.mins }); year: "numeric",
hour: "2-digit",
minute: "2-digit",
});
}; };
// Refresh jobs list via SSE // Refresh jobs list via SSE