zhangwencui
2026-10-29 3ce715a4e66955eac86dcd2f5c8afcfdf8becb6d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
 * 列表展示用的日期处理:带时分秒的日期时间只保留年月日,
 * 本来就是日期、时间或其它内容的值原样返回。
 */
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])}`;
}