如何将Bootstrap Datepicker输入的日期转为日期格式以正确比较?
解决Bootstrap Datepicker日期输入框的日期比较问题
这问题我之前做项目时也踩过坑!直接拿输入框里的date1和date2值比较肯定不对,因为从输入框拿到的是字符串格式的日期,字符串比较是按字符顺序逐位对比的,完全不符合日期的逻辑(比如"10/01/2024"字符串比"09/30/2024"大,但实际日期后者更晚)。下面给你两种最靠谱的解决方式:
方法一:用原生JS将日期字符串转为Date对象
如果你的日期格式是标准的(比如yyyy-mm-dd),可以直接用new Date()转换;如果是自定义格式(比如dd/mm/yyyy),就得手动拆分字符串来构建Date对象,避免解析错误:
// 自定义转换函数,处理dd/mm/yyyy格式的日期字符串 function parseDate(dateStr) { const [day, month, year] = dateStr.split('/'); // 注意:JS的Date对象月份是从0开始的,所以要减1 return new Date(year, month - 1, day); } // 获取输入框的值并转换 const date1 = parseDate($('#date1').val()); const date2 = parseDate($('#date2').val()); // 现在可以正常比较了 if (date1 > date2) { console.log("date1 比 date2 晚"); } else if (date1 < date2) { console.log("date1 比 date2 早"); } else { console.log("两个日期完全相同"); }
方法二:直接用Bootstrap Datepicker自带的getDate()方法
这是最省心的方式,因为getDate()会直接返回原生的Date对象,不用自己处理格式问题:
// 通过datepicker实例获取选中的日期对象 const date1 = $('#date1').datepicker('getDate'); const date2 = $('#date2').datepicker('getDate'); // 先判断是否有选中日期(没选中的话getDate()返回null) if (date1 && date2) { // 用getTime()比较时间戳,判断日期是否相等 if (date1.getTime() === date2.getTime()) { console.log("两个日期一致"); } else if (date1 > date2) { console.log("date1 更晚"); } else { console.log("date2 更晚"); } } else { console.log("请先选择完整的日期"); }
额外注意点
- 不要直接用
===比较两个Date对象,因为它们是不同的对象引用,即使日期相同也会返回false,要用getTime()获取时间戳对比,或者转成ISO字符串对比。 - 如果你的Datepicker设置了特殊日期格式,优先用
getDate()方法,避免手动转换时出现格式兼容问题。
内容的提问来源于stack exchange,提问作者varunvenu
相关产品推荐
相关产品推荐

