You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:12:05