如何将无标识UTC日期字符串转换为UTC Unix时间戳?
解决不带时区标识的日期字符串转UTC Unix时间戳问题
当你使用new Date(dateString)解析不带时区标识的"YYYY-MM-DD HH:mm:ss"格式字符串时,JavaScript会默认按本地时区处理,导致生成的时间戳和预期的UTC时间戳不符。以下两种方法可以解决这个问题:
方法1:给日期字符串添加UTC时区标识
将原字符串转换为ISO 8601格式并追加Z(代表UTC时区),让new Date()强制按UTC解析:
const dateString = "2022-07-23 17:12:22"; // 替换空格为T,末尾添加Z标识UTC时区 const utcDateString = dateString.replace(' ', 'T') + 'Z'; const targetTimestamp = Math.floor(new Date(utcDateString).getTime() / 1000); // 结果:1658596342
方法2:用Date.UTC()手动构建UTC时间
拆分日期时间的各个字段,通过Date.UTC()直接生成UTC时间的毫秒数(注意月份参数是0-based,需减1):
const dateString = "2022-07-23 17:12:22"; const [datePart, timePart] = dateString.split(' '); const [year, month, day] = datePart.split('-').map(Number); const [hour, minute, second] = timePart.split(':').map(Number); // Date.UTC参数:年, 月(0-11), 日, 时, 分, 秒 const utcTimestampMs = Date.UTC(year, month - 1, day, hour, minute, second); const targetTimestamp = Math.floor(utcTimestampMs / 1000); // 结果:1658596342
两种方法对比:
- 方法1操作简单,适合可以修改输入字符串格式的场景;
- 方法2无需修改原字符串,解析逻辑更可控,适合复杂的日期格式处理场景。
内容的提问来源于stack exchange,提问作者user19517065
相关产品推荐
相关产品推荐

