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

如何根据日期字符串提取本地时间 解决JS Date解析时区偏差问题

问题场景

在React Native应用中需要展示API返回的日期数据,API返回的日期值为:"2022-06-20T14:00:00.000",需要最终向用户展示的格式为2:00 PM。

使用如下代码处理时出现异常:

const dateString = "2022-06-20T14:00:00.000"
const date = new Date(dateString);
console.log(date)

打印出的日期被自动转换为了2022-06-20T14:00:00.000Z,JS将该时间识别为UTC时间下午2点,但实际该字符串代表的是本地时间下午2点,最终格式化后的显示时间不符合预期。

问题原因

根据ECMAScript标准,new Date()解析不带时区后缀的ISO 8601格式日期字符串时,会默认将其识别为UTC时间,自动追加Z(UTC时区标识),这就是时间解析偏移的根本原因。

解决方法

你可以根据业务场景选择以下两种方案:

  • 方案1:解析前手动追加本地时区标识,让JS按本地时区解析时间
const dateString = "2022-06-20T14:00:00.000";
// 拼接本地时区后缀后再实例化Date
const date = new Date(`${dateString}${getLocalTimezoneSuffix()}`);

// 工具函数:获取当前环境的本地时区后缀,例如东八区返回"+08:00"
function getLocalTimezoneSuffix() {
  const offset = new Date().getTimezoneOffset();
  const sign = offset > 0 ? '-' : '+';
  const absOffset = Math.abs(offset);
  const hours = String(Math.floor(absOffset / 60)).padStart(2, '0');
  const mins = String(absOffset % 60).padStart(2, '0');
  return `${sign}${hours}:${mins}`;
}

// 后续按需求格式化date即可得到2:00 PM的结果
  • 方案2:如果不需要做日期运算,仅需要展示时间,可以直接拆分字符串格式化,完全绕过时区解析逻辑
const dateString = "2022-06-20T14:00:00.000";
const timeSection = dateString.split('T')[1];
const [hour, minute] = timeSection.split(':');
const period = Number(hour) >= 12 ? 'PM' : 'AM';
const displayHour = Number(hour) % 12 || 12;
const displayText = `${displayHour}:${minute} ${period}`;
// displayText 即为 2:00 PM

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:15:17