如何避免MomentJS默认对已处于UTC时区的日期做时区转换
问题原因
普通moment()方法默认会把输入的日期字符串当作本地时区解析,你传入的09/27/2021 00:00:00本身是UTC时区,初始解析环节就产生了时区偏移误差,后续转时间戳、反向转换的结果自然不符合预期。
解决方案
你需要明确告诉Moment,传入的日期需要按照UTC时区解析,用moment.utc()方法替换原有moment()方法即可:
const someDate = '09/27/2021 00:00:00'; // 明确指定按UTC时区解析输入日期 const date = moment.utc(someDate, 'MM/DD/YYYY HH:mm:ss').valueOf();
如果需要将时间戳反向转换为UTC格式的日期字符串,同样需要用moment.utc()处理:
const utcDateStr = moment.utc(date).format('MM/DD/YYYY HH:mm:ss'); // 输出结果为预期的 09/27/2021 00:00:00
补充说明
- 所有针对UTC时区日期的读写操作都要统一使用
moment.utc()处理,不要和普通moment()方法混用,避免自动切换到本地时区产生偏移 - 如果后续需要将UTC时间转换为当前环境的本地时区显示,可调用
.local()方法实现:const localDateStr = moment.utc(date).local().format('MM/DD/YYYY HH:mm:ss');
内容的提问来源于stack exchange,提问作者Master Roush
相关产品推荐
相关产品推荐

