如何将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
相关产品推荐
相关产品推荐

