JavaScript如何比较日期年月?判断输入日期是否大于当前日期加1个月
基于JavaScript原生Date对象的日期比较实现
实现这个逻辑最容易踩两个坑:一是直接加月份时没处理跨年、月末日期溢出的问题,二是没清零时分秒导致同一天的日期因为时间差出现误判。用原生Date的自动进位能力就能完美匹配你要的判断规则,不需要额外引入第三方库。
核心实现逻辑
- 构造对比日期时,直接基于当前日期的年、月、日给月份字段+1,原生Date会自动处理跨月、跨年、月末的日期合法性(比如12月+1会自动跳到下一年1月,1月31日加1个月会自动适配2月的最后有效日期)
- 所有日期实例都把时、分、秒、毫秒重置为0点,避免当天的时间差干扰比较结果
- 输入日期如果是
DD/MM/YYYY格式不要直接传给Date构造函数,手动拆分字段构造实例避免浏览器兼容性问题 - 用时间戳做严格大于判断,相等的场景统一返回false,和你给出的示例规则一致
可直接运行的代码
function checkInputDateAfterOneMonth(inputDDMMYYYY) { // 生成当前日期顺延1个月的对比日期,统一置为当日0点 const now = new Date(); const compareDate = new Date( now.getFullYear(), now.getMonth() + 1, now.getDate(), 0, 0, 0, 0 ); // 解析DD/MM/YYYY格式的输入日期,同样置为0点 const [inputDay, inputMonth, inputYear] = inputDDMMYYYY.split('/').map(Number); const inputDate = new Date( inputYear, inputMonth - 1, // Date月份从0开始计数,需要减1 inputDay, 0, 0, 0, 0 ); // 严格大于判断,相等时返回false return inputDate.getTime() > compareDate.getTime(); }
示例逻辑验证
把基准日期调整为示例里的2022年7月14日时,生成的对比日期为2022年8月14日,运行结果完全匹配预期:
- 输入
14/07/2022:返回false - 输入
14/08/2022:返回false - 输入
14/09/2022:返回true - 基准日期为2022年12月14日时,对比日期自动生成为2023年1月14日,输入
22/12/2022返回false
注意事项
- 不要用
new Date('14/07/2022')这种方式直接解析字符串,非ISO格式的日期字符串在不同浏览器里解析逻辑不一致,很容易出bug - 比较时统一用
getTime()取时间戳对比,避免隐式类型转换带来的意外结果 - 不需要自己写复杂的月末日期判断逻辑,原生Date构造时遇到超出当月范围的日期会自动进位,完全能满足顺延1个月的常规业务逻辑
内容的提问来源于stack exchange,提问作者wiilan
相关产品推荐
相关产品推荐

