Files
backend/frontend/src/utils/date.ts
T

40 lines
1.3 KiB
TypeScript
Raw Normal View History

/**
* 将 UTC ISO 字符串转换为北京时间(UTC+8)的日期/日期时间字符串
*/
const BJ_OFFSET = 8 * 60 * 60 * 1000 // UTC+8
function _parse(iso: string | null | undefined): Date | null {
if (!iso) return null
const d = new Date(iso)
return isNaN(d.getTime()) ? null : d
}
/** "2026-07-11" */
export function toBeijingDate(iso: string | null | undefined): string {
const d = _parse(iso)
if (!d) return ''
return new Date(d.getTime() + BJ_OFFSET).toISOString().slice(0, 10)
}
/** "2026-07-11 20:30" */
export function toBeijingDateTime(iso: string | null | undefined): string {
const d = _parse(iso)
if (!d) return ''
return new Date(d.getTime() + BJ_OFFSET).toISOString().slice(0, 16).replace('T', ' ')
}
/** "2026-07-11 20:30" (别名) */
export const formatDateTime = toBeijingDateTime
/** 相对时间:刚刚 / N 分钟前 / N 小时前 / N 天前 */
export function relativeTime(iso: string | null | undefined): string {
if (!iso) return ''
const diff = Math.floor((Date.now() - new Date(iso).getTime()) / 1000)
if (diff < 60) return '刚刚'
if (diff < 3600) return `${Math.floor(diff / 60)} 分钟前`
if (diff < 86400) return `${Math.floor(diff / 3600)} 小时前`
if (diff < 2592000) return `${Math.floor(diff / 86400)} 天前`
return iso.slice(0, 10)
}