material_manage_system/frontend/src/utils/datetime.test.js
2026-09-21 14:13:30 +08:00

74 lines
2.5 KiB
JavaScript
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.

import { describe, expect, test } from 'vitest'
import { formatDate, toDateParam } from './datetime'
describe('时间展示格式化', () => {
test('空值显示为 -', () => {
expect(formatDate(null)).toBe('-')
expect(formatDate(undefined)).toBe('-')
expect(formatDate('')).toBe('-')
})
test('Go 的零值时间显示为 -', () => {
// 后端 time.Time 零值序列化后的形态,不能落成 0001/1/1
expect(formatDate('0001-01-01T00:00:00Z')).toBe('-')
expect(formatDate('0001-01-01 00:00:00')).toBe('-')
})
test('MySQL 的零日期显示为 -', () => {
expect(formatDate('0000-00-00 00:00:00')).toBe('-')
expect(formatDate('0000-00-00')).toBe('-')
})
test('无法解析的值显示为 -', () => {
expect(formatDate('not-a-date')).toBe('-')
})
test('正常值按本地时区展示', () => {
const value = '2026-09-21T10:30:00Z'
expect(formatDate(value)).toBe(new Date(value).toLocaleString('zh-CN'))
})
test('传入自定义格式选项时按选项展示', () => {
const value = '2026-09-21T10:30:00Z'
const options = { year: 'numeric', month: '2-digit', day: '2-digit' }
expect(formatDate(value, options)).toBe(new Date(value).toLocaleString('zh-CN', options))
})
test('接受 Date 对象', () => {
const value = new Date('2026-09-21T10:30:00Z')
expect(formatDate(value)).toBe(value.toLocaleString('zh-CN'))
})
test('时间戳为 0 时仍按正常时间展示,不当作空值', () => {
// 0 是合法时间戳(1970-01-01),只有 falsy 才兜底会误伤它
const value = new Date(0)
expect(formatDate(0)).toBe(value.toLocaleString('zh-CN'))
})
})
describe('查询参数日期格式化', () => {
test('空值返回空串', () => {
expect(toDateParam(null)).toBe('')
expect(toDateParam(undefined)).toBe('')
expect(toDateParam('')).toBe('')
})
test('无法解析的值返回空串', () => {
expect(toDateParam('not-a-date')).toBe('')
})
test('按本地时区取日期,不因 UTC 换算偏一天', () => {
// 本地时间当天 00:00。东八区这一刻的 UTC 还是前一天 16:00,
// 若改用 toISOString() 裁前 10 位会得到 9/20,查询范围整整偏一天。
expect(toDateParam(new Date(2026, 8, 21))).toBe('2026-09-21')
})
test('月日补零成两位', () => {
expect(toDateParam(new Date(2026, 0, 5))).toBe('2026-01-05')
})
test('接受日期字符串', () => {
expect(toDateParam(new Date(2026, 8, 21).toISOString())).toBe('2026-09-21')
})
})