Node.js 日志时间“不对”通常是指:日志里的时间比本地时间早/晚几个小时,或不是你期望的时区时间。常见原因和排查方式如下:
Node.js 内部时间基于 UTC,new Date() 返回的是 UTC 时间,但:
console.log(new Date()) 会按系统本地时区显示winston、pino)默认输出 ISO 时间(UTC)例如:
new Date().toISOString()
// 2026-01-15T02:00:00.000Z ← UTC
✅ 解决:
process.env.TZ = 'Asia/Shanghai';
new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })
容器 / Linux 服务器时区不是你预期的:
date
timedatectl
Docker 容器常见问题:
ENV TZ=Asia/Shanghai
或挂载时区:
-v /etc/localtime:/etc/localtime
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }) // 本地时间
pino({ timestamp: true }) // UTC
可改用:
pino({ timestamp: () => `,"time":"${new Date().toLocaleString()}"` })
Date.now() 或时间戳Date.now() 是 UTC 毫秒数✅ 不要把时间戳当地方时间直接读
✅ 统一标准:服务端统一 UTC,展示时再转本地
date -u
时间本身就不准 → 同步时间:
ntpdate pool.ntp.org
process.env.TZ 是否设置date 是否正确如果你愿意,可以贴一段日志示例代码 + 输出结果,我可以直接帮你定位是哪一类问题。