如何在JavaScript中比较dd/mm/yyyy格式的两个日期大小
问题原因
你原有代码无法运行的核心原因是:Date.parse()对字符串格式的解析规则依赖宿主环境,绝大多数环境默认会将你传入的dd/mm/yyyy格式误判为mm/dd/yyyy,当日期数值大于12时会解析失败返回NaN,无法正常比较大小。
适配dd/mm/yyyy格式的比较方案
你可以先把日期字符串按/拆分,手动传入Date构造函数生成合法日期对象后再比较,Date对象可以直接用大于/小于运算符比较,会自动转换为时间戳运算:
// 封装dd/mm/yyyy格式转Date对象的工具函数 function parseDMY(dateStr) { const [day, month, year] = dateStr.split('/').map(Number) // 注意Date构造函数的月份从0开始计数,所以月份要减1 return new Date(year, month - 1, day) } // 你的原有逻辑改造 var dateOne = "24/04/1995" var dateTwo = "24/04/1998" function myFunction() { var d1 = parseDMY(dateOne); var d2 = parseDMY(dateTwo); if (d1 < d2) { alert ("Error! Date did not Match"); } }
注意事项
- 如果需要判断两个日期完全相等,不能直接用
==或===比较Date对象,要转成时间戳判断:d1.getTime() === d2.getTime() - 如需增加日期合法性校验(比如避免2月30日这类无效输入),可以在
parseDMY函数中追加判断,校验生成的Date对象的年月日和输入值是否一致即可 - 该方案无第三方依赖,兼容所有主流浏览器环境
内容的提问来源于stack exchange,提问作者yanir midler
相关产品推荐
相关产品推荐

