跨浏览器兼容的MM-DD-YYYY格式字符串转Date的正确方法
跨浏览器兼容的日期字符串转Date对象方法
问题根源是不同浏览器对非标准日期格式的解析逻辑不一致:Chrome可以识别MM-DD-YYYY格式,但Firefox仅严格支持ECMAScript规范定义的日期格式(如YYYY-MM-DD、RFC 2822格式),直接用new Date(strDate)会出现兼容性问题。
以下是两种可靠的兼容方案:
方案一:手动拆分参数构造Date对象
直接拆分日期字符串的年、月、日部分,传入Date构造函数(注意月份参数是从0开始计数,需要减1):
const strDate = '10-23-2022'; const [month, day, year] = strDate.split('-'); // 月份转成0-11的范围 const dateObj = new Date(year, month - 1, day);
这种方式完全规避浏览器解析差异,是兼容性最好的方案。
方案二:转换为标准格式后解析
通过正则替换将MM-DD-YYYY格式转为浏览器普遍支持的YYYY-MM-DD标准格式,再传入Date构造函数:
const strDate = '10-23-2022'; // 正则替换调整日期顺序 const formattedDate = strDate.replace(/^(\d{2})-(\d{2})-(\d{4})$/, '$3-$1-$2'); const dateObj = new Date(formattedDate);
注意事项
永远不要依赖浏览器对非标准日期字符串的解析行为,ECMAScript标准并未强制要求浏览器支持MM-DD-YYYY这类格式,不同厂商的实现差异会导致兼容性问题。
内容的提问来源于stack exchange,提问作者happytohelp
相关产品推荐
相关产品推荐

