JavaScript中UTC格式日期字符串与当前日期对比出现2小时差问题
问题根源
你遇到的2小时固定差值为时区偏移导致:
JavaScript原生Date对象解析UTC时间字符串时,会自动转换为浏览器运行环境的本地时区时间,若你在对比时混用了UTC时间方法和本地时间方法,就会出现和你所在时区偏移量一致的差值,你所在时区应为UTC+2(包含夏令时偏移的场景也会出现2小时差)。
相关运行截图:
正确UTC时间对比实现方案
方案1:统一转换为时间戳对比(最稳妥)
时间戳为UTC时间的毫秒级数值,不受时区影响,直接对比数值即可:
// 传入的UTC格式日期字符串 const inputUtcStr = '2024-05-20T12:00:00Z'; // 转换为时间戳 const inputTimestamp = new Date(inputUtcStr).getTime(); // 获取当前时间的时间戳 const nowTimestamp = Date.now(); // 对比逻辑 if (inputTimestamp > nowTimestamp) { console.log('传入UTC时间晚于当前时间'); } else if (inputTimestamp < nowTimestamp) { console.log('传入UTC时间早于当前时间'); } else { console.log('两个时间完全相等'); }
方案2:按时间分量对比
如果需要分别对比年、月、日、小时等时间分量,必须统一使用UTC系列方法,禁止混用本地时间方法:
const inputUtcDate = new Date(inputUtcStr); const nowDate = new Date(); const isSameDate = inputUtcDate.getUTCFullYear() === nowDate.getUTCFullYear() && inputUtcDate.getUTCMonth() === nowDate.getUTCMonth() && inputUtcDate.getUTCDate() === nowDate.getUTCDate();
常见踩坑说明
- 若你的UTC字符串末尾没有带
Z标识(如2024-05-20 12:00:00),JS会默认按本地时间解析,需要手动补Z后再解析:new Date(inputUtcStr + 'Z') - 禁止混用
getHours()(本地时间小时)和getUTCHours()(UTC时间小时)类方法做对比,必然出现时差
内容的提问来源于stack exchange,提问作者niio
相关产品推荐
相关产品推荐

