Fix timezone display: parse UTC timestamps correctly in logs pages

Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/70a69601-e0b9-4a00-bcf4-0a85d2bdf6cb

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-28 20:12:13 +00:00
parent d92affabec
commit 9eab576bf1
5 changed files with 23 additions and 3 deletions
+2 -1
View File
@@ -8,6 +8,7 @@ import { useAuthStore } from '@/store/authStore';
import { useRouter } from 'next/navigation';
import { useEffect } from 'react';
import { adminApi, AdminProcessingRun } from '@/lib/api';
import { parseUTC } from '@/lib/date-utils';
import {
Activity,
ChevronLeft,
@@ -31,7 +32,7 @@ function formatDuration(seconds?: number | null): string {
}
function formatDate(iso: string): string {
return new Date(iso).toLocaleString(undefined, {
return parseUTC(iso).toLocaleString(undefined, {
dateStyle: 'short',
timeStyle: 'medium',
});
+3 -2
View File
@@ -5,6 +5,7 @@ import { AuthGuard } from '@/components/AuthGuard';
import { DashboardLayout } from '@/components/DashboardLayout';
import { useQuery } from '@tanstack/react-query';
import { processingRunsApi, mailAccountsApi, MailAccount, ProcessingRun, ProcessingLog } from '@/lib/api';
import { parseUTC } from '@/lib/date-utils';
import {
Inbox,
ChevronLeft,
@@ -20,7 +21,7 @@ import {
function formatRelative(iso?: string | null): string {
if (!iso) return 'Never';
const diff = Date.now() - new Date(iso).getTime();
const diff = Date.now() - parseUTC(iso).getTime();
const minutes = Math.floor(diff / 60000);
if (minutes < 1) return 'Just now';
if (minutes < 60) return `${minutes}m ago`;
@@ -30,7 +31,7 @@ function formatRelative(iso?: string | null): string {
}
function formatDate(iso: string): string {
return new Date(iso).toLocaleString(undefined, {
return parseUTC(iso).toLocaleString(undefined, {
dateStyle: 'short',
timeStyle: 'medium',
});
+16
View File
@@ -0,0 +1,16 @@
/**
* Parse an ISO-8601 datetime string as UTC.
*
* The backend stores all timestamps in UTC. When the serialised string has no
* explicit timezone indicator (no trailing `Z` or `±HH:MM` offset), JavaScript's
* `Date` constructor treats it as *local* time. For clients in UTC+N this
* shifts every timestamp N hours into the past, causing "Xh ago" relative
* labels and `toLocaleString()` absolute dates to be wrong.
*
* This helper appends `Z` to any timezone-naive ISO string so it is always
* interpreted as UTC. Strings that already carry timezone info are passed
* through unchanged.
*/
export function parseUTC(iso: string): Date {
return new Date(/Z|[+-]\d{2}:?\d{2}$/.test(iso) ? iso : iso + 'Z');
}