如何将数据库存储的hour、minute时间值转换为epoch(Unix时间戳)
需求可以实现,你得到NaN的原因有两个:
- 原生JavaScript没有内置全局
epoch()方法,直接调用不存在的方法自然返回非数值结果。 - Epoch时间戳的本质是从1970-01-01 00:00:00 UTC到目标时间的秒/毫秒差值,仅提供时分没有关联具体日期的话,无法确定唯一的时间点,自然无法计算对应时间戳。
正确实现方案
场景1:搭配当前本地日期计算时间戳
适用于需要取当天对应时分的时间戳的场景:
// 数据库存储的字符串格式时分 let hour = "20" let minute = "55" // 初始化日期为当前本地日期 const targetDate = new Date() // 依次设置时、分、秒、毫秒,后两项设为0避免默认值带来误差 targetDate.setHours(parseInt(hour), parseInt(minute), 0, 0) // 13位毫秒级Epoch时间戳 const timestampMs = targetDate.getTime() // 如需10位秒级时间戳,做除法取整即可 const timestampS = Math.floor(timestampMs / 1000)
场景2:搭配指定日期计算时间戳
适用于需要绑定固定日期计算对应时分时间戳的场景:
let hour = "20" let minute = "55" // 初始化指定日期,注意月份从0开始计数,示例为2024年5月20日(5月对应参数为4) const targetDate = new Date(2024, 4, 20) targetDate.setHours(parseInt(hour), parseInt(minute), 0, 0) const timestamp = targetDate.getTime()
补充说明
- 如果需要基于UTC时区计算时间戳,将
setHours替换为setUTCHours即可。 - 前后端交互使用时间戳时,建议统一时区标准,避免时区差导致的时间偏移。
内容的提问来源于stack exchange,提问作者gianlps
相关产品推荐
相关产品推荐

