JS中DD-MM-YYYY格式日期字符串转换错误的正确处理方法
踩过这个坑的人来给你支招!new Date()直接解析DD-MM-YYYY格式的字符串时,会默认按照**美国日期格式(MM-DD-YYYY)**来处理,所以你的09-04-2000被当成了「9月4日」,而不是你预期的「4月9日」。下面给你几个靠谱的解决办法:
方法1:手动拆分字符串(最稳妥)
自己把日期字符串拆分成日、月、年,然后注意JS的月份是从0开始计数的(0=1月,11=12月),所以要把月份减1再传入Date构造函数:
const dateStr = "09-04-2000"; const [day, month, year] = dateStr.split("-"); const correctDate = new Date(year, month - 1, day); console.log(correctDate); // 输出 Fri Apr 09 2000 00:00:00 GMT+...(符合预期)
方法2:转成ISO标准格式
ISO 8601的YYYY-MM-DD格式是Date构造函数能无歧义识别的格式,我们可以把原字符串的顺序反转重组:
const dateStr = "09-04-2000"; // 拆分后反转数组,再拼接成YYYY-MM-DD const isoDateStr = dateStr.split("-").reverse().join("-"); const correctDate = new Date(isoDateStr); console.log(correctDate); // 同样输出正确的4月9日
方法3:用国际化API处理(适合多场景)
如果需要处理不同地区的日期格式,可以用浏览器内置的Intl.DateTimeFormat来辅助解析,不过本质还是要手动映射日期部分:
const dateStr = "09-04-2000"; // 指定地区为使用DD-MM-YYYY格式的区域(比如法国、德国等) const formatter = new Intl.DateTimeFormat('fr-FR', { year: 'numeric', month: '2-digit', day: '2-digit' }); // 拆分原字符串并构造正确日期 const [day, month, year] = dateStr.split("-"); const correctDate = new Date(year, month - 1, day);
重要提醒
永远不要依赖
Date()构造函数直接解析非标准格式的日期字符串!不同浏览器、JS引擎的解析逻辑可能不一致,手动拆分或转成ISO格式才是最可靠的方案。
内容的提问来源于stack exchange,提问作者Shiladittya Chakraborty
相关产品推荐
相关产品推荐

