/**
|
* 列表展示用的日期处理:带时分秒的日期时间只保留年月日,
|
* 本来就是日期、时间或其它内容的值原样返回。
|
*/
|
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])}`;
|
}
|