|
|
|
@@ -74,16 +74,53 @@ export default function SearchPublicNoticeTable({searchCriteria, applyGridOnRead |
|
|
|
|
|
|
|
valueGetter: (params) => { |
|
|
|
const v = params?.value; |
|
|
|
if (!Array.isArray(v) || v.length < 3) return null; |
|
|
|
if (v == null) return null; |
|
|
|
|
|
|
|
const year = v[0]; |
|
|
|
const month = v[1]; // 1-12 |
|
|
|
const day = v[2]; |
|
|
|
const hour = v[3] ?? 0; |
|
|
|
const minute = v[4] ?? 0; |
|
|
|
const second = v[5] ?? 0; |
|
|
|
// 1) Number => epoch timestamp (ms or seconds) |
|
|
|
if (typeof v === "number") { |
|
|
|
if (!Number.isFinite(v)) return null; |
|
|
|
|
|
|
|
return new Date(year, month - 1, day, hour, minute, second); |
|
|
|
// Heuristic: if it's too small, it's probably seconds |
|
|
|
// (ms in 2026 is ~1.7e12, seconds is ~1.7e9) |
|
|
|
const ms = v < 1e11 ? v * 1000 : v; |
|
|
|
|
|
|
|
const d = new Date(ms); |
|
|
|
return Number.isNaN(d.getTime()) ? null : d; |
|
|
|
} |
|
|
|
|
|
|
|
// 2) Array => [Y, M, D, h, m, s] |
|
|
|
if (Array.isArray(v)) { |
|
|
|
if (v.length < 3) return null; |
|
|
|
|
|
|
|
const year = Number(v[0]); |
|
|
|
const month = Number(v[1]); // expecting 1-12 |
|
|
|
const day = Number(v[2]); |
|
|
|
const hour = Number(v[3] ?? 0); |
|
|
|
const minute = Number(v[4] ?? 0); |
|
|
|
const second = Number(v[5] ?? 0); |
|
|
|
|
|
|
|
if (![year, month, day, hour, minute, second].every(Number.isFinite)) return null; |
|
|
|
if (month < 1 || month > 12) return null; |
|
|
|
|
|
|
|
const d = new Date(year, month - 1, day, hour, minute, second); |
|
|
|
|
|
|
|
// Guard against JS "auto-fixing" invalid dates (e.g., Feb 31 -> Mar 2) |
|
|
|
if ( |
|
|
|
d.getFullYear() !== year || |
|
|
|
d.getMonth() !== month - 1 || |
|
|
|
d.getDate() !== day |
|
|
|
) return null; |
|
|
|
|
|
|
|
return d; |
|
|
|
} |
|
|
|
|
|
|
|
// 3) Optional: ISO string support (if it ever appears) |
|
|
|
if (typeof v === "string") { |
|
|
|
const d = new Date(v); |
|
|
|
return Number.isNaN(d.getTime()) ? null : d; |
|
|
|
} |
|
|
|
|
|
|
|
return null; |
|
|
|
}, |
|
|
|
|
|
|
|
valueFormatter: (params) => { |
|
|
|
|