Node.js 日志时间“不对”,通常不是 Node 本身算错了,而是时区或时间来源不一致导致的。下面按常见原因给你梳理一下:
Node.js 内部时间基于 UTC,很多日志库默认输出 UTC 时间,而不是本地时间。
例如:
console.log(new Date().toString());
// 可能显示:Wed Jan 01 2025 08:00:00 GMT+0000 (UTC)
如果服务器在中国(GMT+8),你会看到日志“慢了 8 小时”。
TZ=Asia/Shanghai node app.js
或在 package.json:
"scripts": {
"start": "TZ=Asia/Shanghai node app.js"
}
const dayjs = require('dayjs')
dayjs().tz('Asia/Shanghai').format()
Node.js 读取的是 操作系统时间。
检查系统时间:
date
如果系统时间不对:
# Linux
sudo ntpdate time.nist.gov
# 或
timedatectl set-timezone Asia/Shanghai
Docker 容器默认是 UTC。
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
environment:
- TZ=Asia/Shanghai
timestamp: () => dayjs().format('YYYY-MM-DD HH:mm:ss')
pino({ timestamp: () => `,"time":"${dayjs().format()}"` })
✅ 建议在展示层统一转时区,不要混用
date 系统时间对吗?TZ?如果你愿意,可以贴一段:
我可以帮你精确判断是哪一种原因。