温馨提示×

nodejs日志时间不对咋办

小樊
47
2026-09-23 20:51:03
栏目: 编程语言

Node.js 日志时间不对,通常是时区问题或获取时间的方式不对。下面按常见原因给你排查和解决思路:


一、先确认是不是时区问题

Node.js 默认使用服务器系统时区。

查看当前时区

console.log(new Date())
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)

如果输出的是 UTC 或国外时区,而你想要 Asia/Shanghai:


二、解决方案

✅ 方案 1:设置系统时区(推荐)

Linux

timedatectl set-timezone Asia/Shanghai

或

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

重启 Node 服务后生效。


✅ 方案 2:启动 Node 时指定时区(不改系统)

TZ=Asia/Shanghai node app.js

或 package.json:

{
  "scripts": {
    "start": "TZ=Asia/Shanghai node app.js"
  }
}

✅ 方案 3:日志里手动格式化时间(最稳)

不要用 new Date().toString(),用 dayjs / moment:

使用 dayjs(推荐)

npm i dayjs
const dayjs = require('dayjs')
const tz = require('dayjs/plugin/timezone')
const utc = require('dayjs/plugin/utc')

dayjs.extend(utc)
dayjs.extend(tz)

console.log(dayjs().tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss'))

✅ 方案 4:Winston / Pino 等日志库

Winston 示例

const { createLogger, format, transports } = require('winston')
const dayjs = require('dayjs')

const logger = createLogger({
  format: format.printf(info => {
    return `${dayjs().tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss')} ${info.level}: ${info.message}`
  }),
  transports: [new transports.Console()]
})

三、Docker 场景(很常见)

在 Dockerfile 里加:

ENV TZ=Asia/Shanghai

或 docker run:

docker run -e TZ=Asia/Shanghai your-image

四、快速自检清单

  • [ ] 服务器时区是否正确
  • [ ] Node 启动是否带 TZ
  • [ ] 日志是否用 UTC 时间
  • [ ] 是否在 Docker 里

如果你愿意,可以把:

  • 操作系统
  • 是否 Docker
  • 用的日志库(console / winston / pino)
  • 时间错几小时

发我,我可以直接帮你改代码。

0 踩