React Native中如何使用moment.js将字符串日期转换为UTC格式?
问题原因
你之前的写法不生效有两个核心问题:
- 使用moment解析时,传入的格式字符串
DD-MMM-YYYY hh:mm a和输入的原始日期字符串结构完全不匹配,无法正确解析出日期对象,后续的UTC转换和格式化自然无法得到正确结果。 - dayjs的写法依赖原生
Date构造器解析自定义格式的日期字符串,安卓端原生Date对这类非标准格式的字符串兼容性极差,所以会返回null。
解决方案
方案1:使用moment.js实现
首先按照原始输入字符串的结构配置正确的解析格式符即可,格式符对应规则:
dddd:匹配全称星期(如Wednesday)MMMM:匹配全称月份(如September,注意不要用缩写格式MMM)h:匹配12小时制无前导零的小时(如7)
如果原始日期字符串对应的是本地时区时间,需要转成UTC时间后格式化:
const dateStr = 'Wednesday, 22 September 2021, 7:00:00 am' const utcDate = moment(dateStr, 'dddd, DD MMMM YYYY, h:mm:ss a') .utc() .format('DD-MMM-YYYY hh:mm a')
如果原始日期字符串本身就对应UTC时区的时间,直接用UTC模式解析即可,避免额外时区偏移:
const dateStr = 'Wednesday, 22 September 2021, 7:00:00 am' const utcDate = moment.utc(dateStr, 'dddd, DD MMMM YYYY, h:mm:ss a') .format('DD-MMM-YYYY hh:mm a')
方案2:使用dayjs实现
需要额外引入customParseFormat插件实现自定义格式解析,避开原生Date的兼容性问题:
- 先加载依赖和插件
import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import customParseFormat from 'dayjs/plugin/customParseFormat' dayjs.extend(utc) dayjs.extend(customParseFormat)
- 转换逻辑和moment一致:
原始时间为本地时区的写法:
const dateStr = 'Wednesday, 22 September 2021, 7:00:00 am' const utcDate = dayjs(dateStr, 'dddd, DD MMMM YYYY, h:mm:ss a') .utc() .format('DD-MMM-YYYY hh:mm a')
原始时间为UTC时区的写法:
const dateStr = 'Wednesday, 22 September 2021, 7:00:00 am' const utcDate = dayjs.utc(dateStr, 'dddd, DD MMMM YYYY, h:mm:ss a') .format('DD-MMM-YYYY hh:mm a')
注意:如果你的项目手动修改过dayjs/moment的默认语言配置,需要确保转换时使用英文locale,否则无法识别英文的星期、月份字段。
内容的提问来源于stack exchange,提问作者Pankaj bhalala
相关产品推荐
相关产品推荐

