| @@ -74,16 +74,53 @@ export default function SearchPublicNoticeTable({searchCriteria, applyGridOnRead | |||||
| valueGetter: (params) => { | valueGetter: (params) => { | ||||
| const v = params?.value; | 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) => { | valueFormatter: (params) => { | ||||