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

如何强制PrismaClient将DateTime字段返回为Unix时间戳而非JavaScript日期对象

解决PrismaClient返回DateTime为Date对象而非Unix时间戳的问题

方法1:手动转换Date对象

拿到查询结果后,直接调用Date对象的getTime()(毫秒级)或valueOf()方法获取时间戳,若需要秒级时间戳则除以1000并取整:

const prisma = new PrismaClient()
const mySettings = await prisma.settings.findFirst()
const updatedAtTimestamp = mySettings.updatedAt.getTime() // 毫秒级时间戳
// 秒级时间戳:Math.floor(mySettings.updatedAt.getTime() / 1000)
console.log(updatedAtTimestamp)

方法2:查询时用数据库函数直接返回时间戳

根据你使用的数据库类型,在查询时通过select指定原生函数提取Unix时间戳:

适用于MySQL/MariaDB

const prisma = new PrismaClient()
const mySettings = await prisma.settings.findFirst({
  select: {
    id: true,
    updatedAt: {
      raw: 'UNIX_TIMESTAMP(updatedAt)'
    }
  }
})
// 返回的updatedAt为秒级时间戳数值
console.log(mySettings.updatedAt)

适用于PostgreSQL

const prisma = new PrismaClient()
const mySettings = await prisma.settings.findFirst({
  select: {
    id: true,
    updatedAt: {
      raw: 'EXTRACT(EPOCH FROM updatedAt)'
    }
  }
})
// 返回的updatedAt为秒级时间戳(可能是浮点数,可转成整数)
console.log(Math.floor(mySettings.updatedAt))

方法3:用Prisma中间件自动全局转换

创建全局中间件,拦截所有查询结果,自动将DateTime类型字段转为时间戳:

const prisma = new PrismaClient()

prisma.$use(async (params, next) => {
  const result = await next(params)
  
  // 处理单条数据结果
  if (typeof result === 'object' && result !== null) {
    for (const key in result) {
      if (result[key] instanceof Date) {
        // 替换为毫秒级时间戳,如需秒级则改为 result[key].getTime() / 1000 | 0
        result[key] = result[key].getTime()
      }
    }
  }
  // 处理数组结果
  else if (Array.isArray(result)) {
    result.forEach(item => {
      for (const key in item) {
        if (item[key] instanceof Date) {
          item[key] = item[key].getTime()
        }
      }
    })
  }
  
  return result
})

// 后续所有查询都会自动转换DateTime字段
const mySettings = await prisma.settings.findFirst()
console.log(mySettings.updatedAt) // 直接输出时间戳

注意:方法3会全局生效,若有部分DateTime字段无需转换,可在中间件中添加模型或字段名的过滤逻辑。

内容的提问来源于stack exchange,提问作者Liam Pillay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:53:24