使用JavaScript比较日期返回错误结果,请求协助排查问题
问题分析与解决方案
我来帮你看看这个日期比较的问题~你遇到的错误核心原因是**Date.parse()对dd-mm-yyyy格式的日期解析存在歧义**。大多数浏览器会把这种格式识别成mm-dd-yyyy(月-日-年),比如你输入的01-04-2019会被解析成2019年1月4日,而不是你预期的2019年4月1日,这就导致日期比较的逻辑完全颠倒了。
另外,你把当前日期转成字符串再用Date.parse()解析的步骤完全没必要,直接用原生的Date对象进行比较会更可靠,也能避免额外的格式转换错误。
修正后的代码
var user_date = '01-04-2019'; var todayDate = new Date(); // 手动解析用户输入的dd-mm-yyyy格式日期 var [day, month, year] = user_date.split('-'); // Date构造函数是年、月(0开始)、日,所以月份要减1 var inputToDate = new Date(year, month - 1, day); // 直接使用当前日期的Date对象,不需要转字符串再解析 // 注意:如果要忽略时分秒,把当前日期的时分秒设为0,避免同一天内的时间差影响比较 todayDate.setHours(0, 0, 0, 0); if (inputToDate > todayDate) { alert("the input is later than today"); } else { alert("the input is earlier than today"); }
关键改动说明
- 手动解析日期:通过
split('-')拆分用户输入的日期字符串,明确提取日、月、年,再用Date构造函数正确创建日期对象(记得月份要减1,因为JavaScript的月份是从0开始计数的)。 - 简化当前日期处理:直接使用
todayDate对象,并且通过setHours(0,0,0,0)把时分秒清零,这样比较的是“日期”而非“日期+时间”,避免同一天内因为当前时间晚于0点导致的误判。 - 避免
Date.parse()的歧义:放弃依赖Date.parse()对非标准格式的自动解析,彻底消除格式识别错误的问题。
内容的提问来源于stack exchange,提问作者subhra
相关产品推荐
相关产品推荐

