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

如何将GMT+0000时间转换为正确格式?JS时间显示异常求助

解决JavaScript时间格式显示错误的问题

你的问题出在toLocaleTimeString()默认会使用本地时区转换时间,而Firebase里存储的是UTC时间(13:45),如果你的本地时区比UTC晚4小时(比如北美东部时区),就会显示成9:45 AM。要获取正确的UTC时间部分,有几种简单的解决方法:

方法1:让toLocaleTimeString强制使用UTC时区

直接给toLocaleTimeString()传入时区参数,指定使用UTC,就能得到你要的1:45:00 PM:

const d = new Date("Fri Oct 28 2022 13:45:00 GMT+0000 (Coordinated Universal Time)");
// 指定时区为UTC,同时可自定义时间格式
let text2 = d.toLocaleTimeString('en-US', { 
  timeZone: 'UTC',
  hour12: true,
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit'
});
document.getElementById("demo").innerHTML = text2; // 输出 "01:45:00 PM"

如果不需要前导零,把hour、minute、second改成'numeric'即可。

方法2:手动构建UTC时间字符串

不想依赖本地化方法的话,可以手动提取UTC的时、分、秒,自己转换为12小时制:

const d = new Date("Fri Oct 28 2022 13:45:00 GMT+0000 (Coordinated Universal Time)");
const hours = d.getUTCHours();
const minutes = d.getUTCMinutes().toString().padStart(2, '0');
const seconds = d.getUTCSeconds().toString().padStart(2, '0');
const period = hours >= 12 ? 'PM' : 'AM';
const formattedHour = hours % 12 || 12; // 处理0点为12点的情况
const text2 = `${formattedHour}:${minutes}:${seconds} ${period}`;
document.getElementById("demo").innerHTML = text2; // 输出 "1:45:00 PM"

方法3:截取UTC字符串的时间部分

利用toUTCString()的输出,直接截取时间片段再转换格式:

const d = new Date("Fri Oct 28 2022 13:45:00 GMT+0000 (Coordinated Universal Time)");
const utcStr = d.toUTCString();
// toUTCString格式类似 "Fri, 28 Oct 2022 13:45:00 GMT",截取中间时间部分
const timePart = utcStr.split(' ')[4];
// 24小时制转12小时制
const [hours, minutes, seconds] = timePart.split(':');
const period = hours >= 12 ? 'PM' : 'AM';
const formattedHour = parseInt(hours) % 12 || 12;
const text2 = `${formattedHour}:${minutes}:${seconds} ${period}`;
document.getElementById("demo").innerHTML = text2; // 输出 "1:45:00 PM"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:25:21