From 65b0382330777aa67d4cda8effb48f507baf2eac Mon Sep 17 00:00:00 2001 From: Jason Chuang Date: Tue, 3 Feb 2026 17:00:01 +0800 Subject: [PATCH] fix date sorting in proof search --- src/pages/Proof/Search_GLD/DataGrid.js | 53 ++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/src/pages/Proof/Search_GLD/DataGrid.js b/src/pages/Proof/Search_GLD/DataGrid.js index 6ba3a3e..08a6176 100644 --- a/src/pages/Proof/Search_GLD/DataGrid.js +++ b/src/pages/Proof/Search_GLD/DataGrid.js @@ -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) => {