操作时间是如何设置并直接返回日期格式而非 Unix 时间戳的。
核心逻辑:时间格式化函数
function formatTimestamp(timestamp) {
const date = new Date(timestamp)
const pad = (num) => num.toString().padStart(2, '0')
const year = date.getFullYear()
const month = pad(date.getMonth() + 1) // 月份从0开始,所以需要+1
const day = pad(date.getDate())
const hours = pad(date.getHours())
const minutes = pad(date.getMinutes())
const seconds = pad(date.getSeconds())
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}
讲解:
-
这个函数接收一个 Unix 时间戳(毫秒级)
-
使用 JavaScript 的
Date
对象将时间戳转换为日期对象 -
提取年、月、日、时、分、秒
-
使用
padStart
方法确保月份、日期、时间等都是一位数时前面补零(例如:5变成05) -
按照
YYYY-MM-DD HH:MM:SS
的格式拼接成字符串返回
时间范围设置
const startOfDayTimestamp = getStartOfDayTimestamp()
const endOfDayTimestamp = getEndOfDayTimestamp()
queryItems.value.start_time = formatTimestamp(startOfDayTimestamp)
queryItems.value.end_time = formatTimestamp(endOfDayTimestamp)
讲解:
-
getStartOfDayTimestamp
和getEndOfDayTimestamp
分别获取当天开始和结束的时间戳 -
使用
formatTimestamp
函数将这些时间戳转换为易读的日期格式 -
将转换后的结果赋值给
queryItems.value.start_time
和queryItems.value.end_time
时间范围选择器的处理
const handleDateRangeChange = (value) => {
if (value == null) {
queryItems.value.start_time = null
queryItems.value.end_time = null
} else {
queryItems.value.start_time = formatTimestamp(value[0])
queryItems.value.end_time = formatTimestamp(value[1])
}
}
讲解:
-
当用户选择时间范围时,
value
是一个包含两个 Unix 时间戳的数组 -
对这两个时间戳分别调用
formatTimestamp
函数进行格式化 -
将格式化后的结果赋值给
queryItems.value.start_time
和queryItems.value.end_time
表格列的定义
{
title: '操作时间',
key: 'created_at',
align: 'center',
width: 'auto',
ellipsis: { tooltip: true },
}
讲解:
-
表格中定义了一个 "操作时间" 列,对应数据中的
created_at
字段 -
这里的
created_at
字段在后端返回时可能是 Unix 时间戳 -
但在前端展示时,我们通常会对其进行格式化处理(虽然代码中没有直接体现,但可以通过类似
formatTimestamp
的方法进行处理)
总结:时间格式化流程
-
后端返回:时间数据通常以 Unix 时间戳形式返回(毫秒级数字)
-
前端接收:获取到时间戳后,使用
formatTimestamp
函数进行格式化 -
展示给用户:将格式化后的字符串展示在页面上
优化建议(可选)
-
集中管理格式化逻辑: 可以将
formatTimestamp
放到一个公共工具文件中,方便项目中其他地方复用 -
添加时区处理: 如果系统涉及多个时区,可以在格式化前调整时区
-
使用日期库: 对于更复杂的日期处理,可以考虑使用
date-fns
或day.js
等日期处理库。