You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js环境下MongoDB如何存储HH-MM-SS格式的时间数据

问题解答

完全可以实现,根据你的后续使用场景可以选择两种不同的实现方案:

方案1:直接使用String类型存储(适合仅需存储展示的场景)

你当前设置的String类型本身就可以直接存储HH-MM-SS格式的字符串,只需要加上Mongoose自带的校验规则,就能保证存入的内容严格符合格式要求,示例代码如下:

const register_schema = new Schema({
    arrived_at: { 
        type: String, 
        // 正则校验:匹配00-23的小时,00-59的分钟和秒,严格符合HH-MM-SS格式
        match: /^([01]\d|2[0-3])-([0-5]\d)-([0-5]\d)$/,
        required: true // 可根据需求设置是否必填
    }, 
    gone_at: { 
        type: String,
        match: /^([01]\d|2[0-3])-([0-5]\d)-([0-5]\d)$/
    }
})

如果写入的内容不符合格式要求,Mongoose会直接抛出校验错误,不会把非法数据写入数据库。

方案2:使用Date类型存储(适合需要时间计算/筛选的场景)

如果你后续需要对这两个字段做时间运算(比如计算停留时长、按时间段筛选记录),更推荐用Date类型存储数据,在查询返回时再格式化为HH-MM-SS格式,时间操作的灵活度会高很多,示例代码如下:

// Schema定义
const register_schema = new Schema({
    arrived_at: { type: Date },
    gone_at: { type: Date }
})

// 时间格式化工具函数(也可以用dayjs等第三方库实现)
const formatToHMS = (date) => {
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')
  return `${hours}-${minutes}-${seconds}`
}

// 查询时格式化返回
const records = await Register.find()
const result = records.map(record => ({
  ...record.toObject(),
  arrived_at: formatToHMS(record.arrived_at),
  gone_at: formatToHMS(record.gone_at)
}))

内容的提问来源于stack exchange,提问作者GNETO DOMINIQUE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:36:02