You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Chrome 67 Beta中Date().toString()时区字符串异常变更问题咨询

解决Chrome 67+中Date.toString()时区显示过长的问题

嘿,这个时区显示的变化确实挺闹心的,尤其是在屏幕寸土寸金的移动设备上!我给你几个实用的解决思路,帮你找回熟悉的3字母时区代码:

1. 从toTimeString()中提取3字母时区

Chrome 67虽然改了toString()的输出,但toTimeString()依然保留了带3字母时区的格式(比如"15:20:45 GMT+0100 (BST)")。你可以用正则轻松提取出括号里的缩写:

const getShortTimezone = () => {
  const timeStr = new Date().toTimeString();
  const timezoneMatch = timeStr.match(/\(([A-Z]{3})\)/);
  return timezoneMatch ? timezoneMatch[1] : 'Unknown';
};

// 调用示例
console.log(getShortTimezone()); // 输出类似 BST、GMT 这样的3字母代码

2. 用Intl API自定义紧凑时间格式

如果你的需求是在页面上展示时间而非依赖toString()的输出,推荐用现代的Intl.DateTimeFormat API,它能直接指定显示短时区名称,而且适配性更好:

const compactTimeWithTimezone = new Intl.DateTimeFormat('en-GB', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  timeZoneName: 'short' // 关键:指定显示短时区代码
}).format(new Date());

console.log(compactTimeWithTimezone); // 输出类似 "14/05/2024, 15:25 BST"

这个方法不仅能满足小屏幕的紧凑显示,还能根据用户的语言区域自动调整格式,体验更友好。

3. 兼容新旧版本的 fallback 方案

如果你需要同时适配Chrome 66及更早版本,可以加个版本判断,针对不同版本用不同的提取逻辑:

// 先获取Chrome版本号
const getChromeVersion = () => {
  const versionMatch = navigator.userAgent.match(/Chrome\/(\d+)/);
  return versionMatch ? parseInt(versionMatch[1], 10) : null;
};

const getShortTimezone = () => {
  const chromeVersion = getChromeVersion();
  if (chromeVersion && chromeVersion >= 67) {
    // 新版处理逻辑
    const timezoneMatch = new Date().toTimeString().match(/\(([A-Z]{3})\)/);
    return timezoneMatch ? timezoneMatch[1] : '';
  } else {
    // 旧版直接从toString提取
    const timezoneMatch = new Date().toString().match(/([A-Z]{3}) \(/);
    return timezoneMatch ? timezoneMatch[1] : '';
  }
};

小提醒

虽然3字母时区代码存在不唯一的问题(比如IST对应多个时区),但如果你的目标用户集中在特定区域,这个方案完全够用。要是面向全球用户,可能需要结合完整时区信息,但在移动设备的紧凑显示场景下,3字母代码依然是性价比很高的选择。

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

火山引擎 最新活动