You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动