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:
@@ -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',
|
||||
});
|
||||
|
||||
@@ -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',
|
||||
});
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
Reference in New Issue
Block a user