frontend: show Energy/DSMR/meter times in local timezone, 24h
Backend serializes SQLite-read (naive) UTC datetimes without a Z, so the browser was parsing them as local time -> the UI effectively showed UTC values. - New src/utils/datetime.ts: treats a tz-less timestamp as UTC, then formats in the browser's local timezone with hour12:false (no AM/PM). - Applied to Energy tabs (contracts/prices/costs/DSMR), per-device readings & trends, and the meter readings table on the Records page. - CostView Today/This month now use local day boundaries (queries stay UTC ISO). - Untouched: location/poo (raw Zulu strings), the map, and query-window params. - Tests are timezone-independent (verified under TZ=America/Los_Angeles).
This commit is contained in:
@@ -48,6 +48,7 @@ import { DsmrPanel } from '../energy/DsmrPanel'
|
||||
import type { ModbusDevice, ModbusTestReadResponse, MetricInfo } from '../energy/hooks'
|
||||
import { ApiError } from '../api/client'
|
||||
import { formatMetricValue } from '../energy/format'
|
||||
import { formatLocalDateTime } from '../utils/datetime'
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Delete confirmation modal (with 409 "disable instead" hint)
|
||||
@@ -311,7 +312,7 @@ function LatestReadingsCard({ device, autoRefresh }: LatestReadingsCardProps) {
|
||||
</Text>
|
||||
{latest.recorded_at && (
|
||||
<Text size="xs" c="dimmed">
|
||||
{new Date(latest.recorded_at).toLocaleString()}
|
||||
{formatLocalDateTime(latest.recorded_at)}
|
||||
</Text>
|
||||
)}
|
||||
</Group>
|
||||
|
||||
Reference in New Issue
Block a user