JavaScript使用moment转换13-04-2023为MMM Do YYYY结果异常如何修复
问题根因
你传入的日期字符串是13-04-2023,属于DD-MM-YYYY(日-月-年)的排列格式,但moment解析未指定格式的字符串时,会优先按ISO标准、内置默认规则尝试拆解,无法正确识别这种自定义顺序的日期串,才会把字段错配解析成0018年10月14日,输出Oct 14th 0018的错误结果。
修复方法
解析时第二个参数明确传入输入日期的格式,告诉moment每个位置的字段代表什么即可:
// 明确指定输入字符串为「日-月-年」格式 moment(ResData.mDate, "DD-MM-YYYY").format("MMM Do YYYY")
上述代码执行后会正确输出Apr 13th 2023,和预期结果一致。
可选优化
- 如果要避免格式不匹配时静默解析出错误日期,可以开启严格解析模式,在第三个参数传入
true,当输入字符串和指定格式不匹配时会直接返回无效日期提示,方便排查问题:
moment(ResData.mDate, "DD-MM-YYYY", true).format("MMM Do YYYY")
- 如果需要输出中文格式的月、日序,提前引入moment对应的中文语言包即可,输出结果会自动转为中文表述。
内容的提问来源于stack exchange,提问作者nim
相关产品推荐
相关产品推荐

