34 lines
984 B
JavaScript
34 lines
984 B
JavaScript
export function formatDate(iso) {
|
|
if (!iso) return '—';
|
|
return new Date(iso).toLocaleString(undefined, {
|
|
day: '2-digit', month: '2-digit', year: '2-digit',
|
|
hour: '2-digit', minute: '2-digit',
|
|
});
|
|
}
|
|
|
|
export function formatDuration(ms) {
|
|
if (ms == null) return '—';
|
|
if (ms < 1000) return `${ms}ms`;
|
|
if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;
|
|
const m = Math.floor(ms / 60000);
|
|
const s = Math.round((ms % 60000) / 1000);
|
|
return `${m}m ${s}s`;
|
|
}
|
|
|
|
// SQLite stores UTC without timezone suffix — normalise before parsing.
|
|
export function parseUtc(iso) {
|
|
if (!iso) return null;
|
|
return new Date(iso.replace(' ', 'T') + 'Z');
|
|
}
|
|
|
|
export function formatElapsed(since) {
|
|
const d = parseUtc(since);
|
|
if (!d) return '—';
|
|
const s = Math.floor((Date.now() - d.getTime()) / 1000);
|
|
if (s < 60) return `${s}s`;
|
|
const m = Math.floor(s / 60);
|
|
if (m < 60) return `${m}m ${s % 60}s`;
|
|
const h = Math.floor(m / 60);
|
|
return `${h}h ${m % 60}m`;
|
|
}
|