Node.js 日志时间“不对”通常是时区、日志库配置或系统时间导致的,下面按常见原因逐一说明,并给出排查/解决方法。
Node.js 内部 Date 默认是 UTC,但 toString() 会显示本地时区:
new Date().toString()
// Thu Jan 01 2026 08:00:00 GMT+0800 (中国标准时间)
new Date().toISOString()
// 2026-01-01T00:00:00.000Z ← UTC
如果你在日志中看到:
Z(如 2026-01-01T00:00:00.000Z)✅ 说明是 UTC 时间
TZ=Asia/Shanghai node app.js
或系统级:
timedatectl set-timezone Asia/Shanghai
new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })
winstonpinolog4jsmorganlogger.info(new Date().toISOString())
⚠️ 这是 UTC
✅ 解决:
const { format } = require('winston');
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' })
容器中经常:
date
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
environment:
- TZ=Asia/Shanghai
date
timedatectl
ntpdate -u pool.ntp.org
# 或
timedatectl set-ntp true
可能原因:
process.uptime() 当时间✅ 日志一定要用 真实时间(Date),不要用 uptime
date 是否正确Z(UTC)TZ 环境变量是否设置如果你愿意,可以贴:
我可以直接帮你定位是哪一类问题。