如何判断dd/mm/yyyy格式的当前日期是否在指定起止日期范围内
问题根源
原代码逻辑失效是因为JavaScript内置的Date.parse()方法默认不支持dd/mm/yyyy格式的日期解析:对于斜杠分隔的日期字符串,JS默认按照mm/dd/yyyy(月/日/年)的规则解析,传入日在前的字符串时会出现解析值错位、生成错误时间戳甚至返回Invalid Date的问题,最终导致范围判断结果不符合预期。
修复方案
不要直接用Date.parse处理非标准格式的日期字符串,先手动拆解dd/mm/yyyy字符串的日、月、年字段,再生成合法的Date对象做时间戳比对即可。注意JS中Date构造函数的月份参数从0开始计数(0对应1月,11对应12月),解析到的月份数值需要减1再传入。
正确实现代码如下:
function dateCheck(from, to, currentdate) { // 解析dd/mm/yyyy格式字符串为时间戳 const parseDate = (dateStr) => { const [day, month, year] = dateStr.split('/').map(item => parseInt(item, 10)); return new Date(year, month - 1, day).getTime(); }; const startTs = parseDate(from); const endTs = parseDate(to); const checkTs = parseDate(currentdate); return checkTs >= startTs && checkTs <= endTs; }
注意事项
- 该实现要求传入的三个日期参数严格遵循
dd/mm/yyyy格式,否则会出现解析错误 - 上述代码默认比对的是日期零点的时间戳,如果需要带时分秒比对,可以扩展
parseDate方法接收时分秒参数 - 所有JS环境对非标准日期字符串的解析逻辑没有统一规范,直接用
Date.parse处理自定义格式日期大概率出现跨环境兼容问题,不建议使用
测试示例:传入from为
01/10/2024(2024年10月1日)、to为31/10/2024(2024年10月31日),校验15/10/2024时返回true,校验01/09/2024时返回false,不会出现原代码将月份、日期解析错位的问题。
内容的提问来源于stack exchange,提问作者Ronak Munjapara
相关产品推荐
相关产品推荐

