JavaScript如何将AM/PM格式时分转为今日UTC毫秒时间戳
JS将12小时制时间字符串转为当日UTC毫秒时间戳
核心逻辑是先解析输入的12小时制时间,再基于当前UTC日期拼接完整时间对象,最终生成时间戳,避免本地时区导致的偏移问题。
可直接运行的实现代码
/** * 将 "6:00 AM" 格式的12小时制时间转为今日UTC对应毫秒时间戳 * @param {string} timeStr - 12小时制时间字符串 * @returns {number} 毫秒级UTC时间戳 */ function getTodayUTCTimestamp(timeStr) { // 拆分时间部分和AM/PM标识 const [clockTime, meridiem] = timeStr.trim().split(/\s+/); let [hours, minutes] = clockTime.split(':').map(Number); // 12小时制转24小时制 if (meridiem.toUpperCase() === 'PM' && hours !== 12) hours += 12; if (meridiem.toUpperCase() === 'AM' && hours === 12) hours = 0; // 取当前UTC日期的年、月、日(月份从0开始计数,直接取UTCMonth不需要额外转换) const now = new Date(); const year = now.getUTCFullYear(); const month = now.getUTCMonth(); const day = now.getUTCDate(); // 生成UTC时间戳,秒、毫秒位默认填0,需要对应示例的9秒偏移就在秒参数位置传9 return Date.UTC(year, month, day, hours, minutes, 0, 0); } // 调用测试 console.log(getTodayUTCTimestamp("6:00 AM"));
注意事项
- 不要直接用本地时间的
getFullYear()/getMonth()/getDate()取日期拼接,会和UTC日期存在时区差,导致结果偏差 - 12点的特殊场景要单独处理:
12:00 AM对应UTC 0点,12:00 PM对应UTC 12点 - 你给出的示例时间戳对应
Wed Jun 15 2022 06:00:09带9秒的零散值,属于示例的随机偏差,常规业务场景秒、毫秒位传0即可,有特殊偏移需求自行调整对应参数就行。
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

