You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中(new Date()).toJSON()返回错误时间及时区的问题

解决Node.js中toJSON()返回UTC时间而非本地时区时间的问题

嘿,这个问题我之前也踩过坑!其实toJSON()方法的设计就是默认返回UTC时区的ISO 8601格式字符串(带Z后缀表示UTC),而直接打印Date对象时,JS会自动输出本地时区的时间表示,所以才会出现你看到的两种不同结果。下面给你几个实用的解决办法:

方法1:手动构建本地时区的ISO格式字符串

因为toJSON()本质上调用了toISOString(),这两个方法都会返回UTC时间。如果想要得到和本地时区一致的ISO格式字符串,可以自己提取Date对象的本地时间属性来拼接:

function getLocalISOString(date = new Date()) {
  // 提取本地时间的各个部分
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');
  const milliseconds = String(date.getMilliseconds()).padStart(3, '0');

  // 计算本地时区偏移(分钟转成小时:分钟格式)
  const timeZoneOffset = -date.getTimezoneOffset();
  const offsetSign = timeZoneOffset >= 0 ? '+' : '-';
  const offsetHours = String(Math.floor(Math.abs(timeZoneOffset) / 60)).padStart(2, '0');
  const offsetMinutes = String(Math.abs(timeZoneOffset) % 60).padStart(2, '0');

  // 拼接成本地时区的ISO格式字符串
  return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}${offsetSign}${offsetHours}:${offsetMinutes}`;
}

// 使用示例
console.log(getLocalISOString()); // 输出类似 2018-01-03T14:47:12.773+03:30 的结果

方法2:用toLocaleString系列方法定制本地时间输出

如果不需要严格的ISO格式,只是想要易读的本地时间(包含时区信息),可以用toLocaleString或toLocaleDateTimeString,还能自定义格式和语言:

const date = new Date();
// 定制输出格式,包含毫秒和完整时区名称
const localTimeStr = date.toLocaleString('en-US', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  fractionalSecondDigits: 3,
  timeZoneName: 'long'
});

console.log(localTimeStr); // 输出类似 "01/03/2018, 14:47:12.773 Iran Standard Time"

额外提醒:UTC时间的适用场景

顺便说一句,如果是用于数据存储或跨时区传输,其实toJSON()返回的UTC时间是更推荐的选择——因为不同时区的客户端可以统一将UTC时间转换为各自的本地时间展示,避免时区混乱。只有在需要直接给用户展示本地时间时,再转成本地时区格式就好。

内容的提问来源于stack exchange,提问作者Sepehr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:02:15