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

iOS与Android平台JSON日期解析差异及解决方案咨询

日期解析跨平台差异问题解答

问题场景

我的应用返回格式为'/Date(1672869600000)/'的日期字符串,使用以下JavaScript代码解析:

var data = '/Date(1672869600000)/';
var start = new Date(parseInt(data.substr(6)))

在Android平台得到结果:Thu Jan 05 2023 00:00:00 GMT+0200 (South Africa Standard Time);而在iOS的Chromium浏览器中得到结果:Wed Jan 04 2023 14:00:00 GMT-0800 (Ora Standard del Pacifico USA)。

差异产生的原因

核心是本地时区差异:

  • JavaScript中new Date(timestamp)的参数是UTC毫秒时间戳(1672869600000对应UTC时间2023年1月5日00:00:00)。
  • Date对象在生成可读字符串时,会自动将UTC时间转换为当前运行环境的本地时区时间展示。
  • 你的Android设备使用南非标准时间(GMT+0200,比UTC快2小时),而iOS的Chromium浏览器使用美国太平洋标准时间(GMT-0800,比UTC慢8小时),两者时区偏移量不同,导致同一个UTC时间戳被转换为不同的本地时间字符串。

调整解析函数的方案

根据需求选择以下方式:

1. 统一展示UTC时间

如果需要所有平台显示一致的UTC时间,使用Date对象的UTC相关方法:

var data = '/Date(1672869600000)/';
// 用正则更可靠地提取时间戳(避免字符串格式变化导致截取错误)
var timestamp = parseInt(data.match(/\d+/)[0]);
var start = new Date(timestamp);

// 获取UTC标准格式字符串,示例:"Thu, 05 Jan 2023 00:00:00 GMT"
var utcTimeStr = start.toUTCString();
// 或者获取ISO标准UTC格式,示例:"2023-01-05T00:00:00.000Z"
var isoUtcTimeStr = start.toISOString();

2. 固定转换为指定时区的时间

如果需要强制显示为某个特定时区(比如南非时区),使用Intl.DateTimeFormat指定时区:

var data = '/Date(1672869600000)/';
var timestamp = parseInt(data.match(/\d+/)[0]);
var start = new Date(timestamp);

// 格式化南非时区的时间
var targetTime = new Intl.DateTimeFormat('en-US', {
  timeZone: 'Africa/Johannesburg',
  year: 'numeric',
  month: 'short',
  day: 'numeric',
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  timeZoneName: 'long'
}).format(start);
// 输出结果示例:"Jan 05, 2023, 02:00:00 South Africa Standard Time"

3. 优化时间戳提取逻辑

原代码用substr(6)截取时间戳,若字符串格式微调(比如前面多了字符)就会出错,改用正则表达式提取更稳定:

// 匹配字符串中的数字部分,提取时间戳
var timestamp = parseInt(data.match(/\d+/)[0]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:50:29