如何在JavaScript中将字符串转为UTC时区的Date对象?
将字符串转换为UTC时区的Date对象
问题根源
你当前的代码用moment(...)解析字符串时,默认会把输入视为本地时区的时间。当你转成Date对象后,后端读取UTC时间时,会自动将本地时间(GMT+03)转换为UTC,导致时间从09:25变成06:25。
解决方案
方法1:使用moment.utc()解析(推荐,保留moment依赖)
直接用moment.utc()把输入字符串当作UTC时间解析,再转成Date对象:
// 把输入字符串视为UTC时间解析 const utcMoment = moment.utc('2023-06-16 09-25-41', 'YYYY-MM-DD HH-mm-ss'); // 转换为Date对象,此时UTC时间就是原字符串的09:25:41 return utcMoment.toDate();
这样生成的Date对象,内部存储的时间戳对应的UTC时间就是你需要的09:25:41,后端处理时能拿到正确的UTC时间。
方法2:手动构造UTC Date对象(无需moment)
如果不想依赖moment,可以拆分字符串参数,用Date.UTC()构造UTC时间戳:
const dateStr = '2023-06-16 09-25-41'; // 拆分日期和时间部分 const [datePart, timePart] = dateStr.split(' '); const [year, month, day] = datePart.split('-').map(Number); const [hour, minute, second] = timePart.split('-').map(Number); // 注意:Date.UTC的月份参数是0开始的,所以要减1 const utcDate = new Date(Date.UTC(year, month - 1, day, hour, minute, second)); return utcDate;
这种方式直接基于UTC时间创建Date对象,同样能保证后端读取的UTC时间为09:25:41。
内容的提问来源于stack exchange,提问作者josh
相关产品推荐
相关产品推荐

