修改时区显示问题
This commit is contained in:
@@ -1,12 +1,32 @@
|
||||
const CST_OFFSET = 8 * 60; // CST = UTC+8, in minutes
|
||||
|
||||
export function formatDate(iso: string | null | undefined): string {
|
||||
if (!iso) return '-';
|
||||
let s = iso.trim();
|
||||
// Normalize: space → T
|
||||
if (!s.includes('T')) s = s.replace(' ', 'T');
|
||||
// Truncate microseconds: 2026-05-13T15:04:04.313751 → 2026-05-13T15:04:04
|
||||
const dotIdx = s.indexOf('.');
|
||||
if (dotIdx > 0) s = s.slice(0, dotIdx);
|
||||
// Remove any trailing timezone info (backend now sends naive datetimes)
|
||||
s = s.replace(/[+-]\d{2}:?\d{0,2}$/, '').replace(/Z$/, '');
|
||||
return s.replace('T', ' ').slice(0, 16);
|
||||
const s = iso.trim();
|
||||
if (!s) return '-';
|
||||
|
||||
// Parse the ISO string, handling timezone offset
|
||||
const m = s.match(/^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(Z|[+-]\d{2}:?\d{2})?$/);
|
||||
if (!m) return s.slice(0, 16).replace('T', ' ');
|
||||
|
||||
const [, year, month, day, hour, min, sec, tz] = m;
|
||||
const utcMs = Date.UTC(+year, +month - 1, +day, +hour, +min, +sec);
|
||||
|
||||
if (tz && tz !== 'Z') {
|
||||
const sign = tz[0] === '+' ? 1 : -1;
|
||||
const [oh, om] = tz.slice(1).split(':');
|
||||
const offsetMin = sign * (+oh * 60 + +om);
|
||||
const localMs = utcMs - offsetMin * 60000 + CST_OFFSET * 60000;
|
||||
const d = new Date(localMs);
|
||||
return `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())} ${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}`;
|
||||
}
|
||||
|
||||
const isUTC = tz === 'Z';
|
||||
const localMs = isUTC ? utcMs + CST_OFFSET * 60000 : utcMs;
|
||||
const d = new Date(localMs);
|
||||
return `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())} ${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}`;
|
||||
}
|
||||
|
||||
function pad(n: number): string {
|
||||
return n < 10 ? `0${n}` : String(n);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user