Files
zkxw/web-admin/src/utils/datetime-display.ts
T
zlwuandCursor db31990ebe feat: 细胞存储缴费催缴、统一样本信息与协议支付能力增强
汇总近期业务改动:催缴菜单与后端、样本信息快捷登记与进度、运费关联、客户档案扩展、协议优惠/期次与押金划转,并同步 SQL 迁移与管理端页面收敛。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 21:20:37 +08:00

45 lines
1.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** 是否形如 ISO / 空格分隔的日期时间字符串 */
export function looksLikeDateTime(value: unknown): boolean {
const s = String(value ?? '').trim()
return /^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2})?/.test(s)
}
/**
* 展示用日期时间:若时分均为 0(或无时间部分)则只显示 YYYY-MM-DD;
* 否则显示到时分(不含秒)。
*/
export function formatDateTimeDisplay(value: string | number | null | undefined): string {
const s = String(value ?? '').trim()
if (!s) return ''
if (/^\d{4}-\d{2}-\d{2}$/.test(s)) return s
const m = s.match(
/^(\d{4}-\d{2}-\d{2})[T ](\d{2}):(\d{2})(?::(\d{2})(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?$/
)
if (m) {
const [, date, hh, mm, ss = '00'] = m
if (hh === '00' && mm === '00' && ss.startsWith('00')) {
return date
}
return `${date} ${hh}:${mm}`
}
return s
}
/** 纯日期字段:始终只展示 YYYY-MM-DD(兼容后端带 00:00:00 的历史数据) */
export function formatDateOnly(value: string | number | null | undefined): string {
const s = String(value ?? '').trim()
if (!s) return ''
return s.length >= 10 ? s.slice(0, 10) : s
}
/** 通用展示:空值 → —;日期时间按 formatDateTimeDisplay 处理 */
export function formatDisplayOrDash(value: unknown): string {
if (value === null || value === undefined || value === '') return '—'
if (typeof value === 'boolean') return value ? '是' : '否'
const s = String(value)
return looksLikeDateTime(s) ? formatDateTimeDisplay(s) || '—' : s
}