Node.js 欧洲罗马时区设置无效问题求助
解决Node.js设置欧洲罗马时区不生效的问题
嘿,我来帮你搞定这个时区小坑!你遇到的问题其实挺明确的——你虽然用time模块创建了带罗马时区的now对象,但后面生成时间戳的时候,完全没用到这个变量,反而重新实例化了原生的new Date(),这当然还是UTC+0的时间啦!
问题根源
你这段代码是关键问题所在:
var time = req.body.created_at = new Date().toISOString().replace(/T/, ';').replace(/\..+/, '')+ ';';
这里你重新创建了原生的Date对象,它根本不知道你之前设置的罗马时区,自然输出UTC时区的时间。
修复方案(基于你已安装的time模块)
把生成时间的逻辑改成使用你已经设置好时区的now对象,代码调整如下:
var time = require('time'); // 创建带罗马时区的Date实例 var now = new time.Date(); now.setTimezone("Europe/Rome"); // 使用这个已设置时区的实例来格式化时间 req.body.created_at = now.toISOString().replace(/T/, ';').replace(/\..+/, '') + ';';
额外建议
- 可以先确认下
time模块的版本,避免版本兼容问题,重新安装最新版试试:npm install time@latest - 如果之后不想依赖第三方模块,也可以用Node.js原生的
Intl.DateTimeFormat来处理时区,示例代码如下:
const now = new Date(); // 格式化欧洲罗马时区的时间 const formattedRomeTime = new Intl.DateTimeFormat('en-GB', { timeZone: 'Europe/Rome', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }).format(now); // 转换成你需要的分号分隔格式 req.body.created_at = formattedRomeTime.replace(/\//g, '-').replace(/ /, ';') + ';';
这样调整后,应该就能正确显示欧洲罗马时区的时间啦!
内容的提问来源于stack exchange,提问作者Gabriela Boyadjiyska




