/** * 列表展示用的日期处理:带时分秒的日期时间只保留年月日, * 本来就是日期、时间或其它内容的值原样返回。 */ const DATE_TIME_PATTERN = /^(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})日?[ T]\d{1,2}:\d{2}(?::\d{2})?(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$/; function pad2(value) { return String(value).padStart(2, "0"); } export function toDateOnly(value) { if (value == null || value === "") return value; if (value instanceof Date) { if (Number.isNaN(value.getTime())) return value; return `${value.getFullYear()}-${pad2(value.getMonth() + 1)}-${pad2( value.getDate() )}`; } if (typeof value !== "string") { // 对象/数组按表格原有方式转成文本,避免把非字符串直接交给渲染层 return typeof value === "object" ? String(value) : value; } const text = value.trim(); const matched = text.match(DATE_TIME_PATTERN); if (!matched) return value; return `${matched[1]}-${pad2(matched[2])}-${pad2(matched[3])}`; }