Node.js 日志时间不对,通常是时区问题或获取时间的方式不对。下面按常见原因给你排查和解决思路:
Node.js 默认使用服务器系统时区。
console.log(new Date())
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
如果输出的是 UTC 或国外时区,而你想要 Asia/Shanghai:
timedatectl set-timezone Asia/Shanghai
或
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
重启 Node 服务后生效。
TZ=Asia/Shanghai node app.js
或 package.json:
{
"scripts": {
"start": "TZ=Asia/Shanghai node app.js"
}
}
不要用 new Date().toString(),用 dayjs / moment:
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'))
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()]
})
在 Dockerfile 里加:
ENV TZ=Asia/Shanghai
或 docker run:
docker run -e TZ=Asia/Shanghai your-image
TZ如果你愿意,可以把:
发我,我可以直接帮你改代码。