JavaScript如何通过点击事件实现Date对象日期逐次增减
问题原因
代码每次点击返回相同日期,核心问题有两个:
- 存储日期的
date变量定义在点击回调内部,每次点击都会重新执行var date = new Date(),把日期重置为点击当下的系统时间,根本没有保留上一次计算后的日期值 addDays方法定义在点击回调内部,每次点击都会重复给Date原型挂载同一个方法,属于无意义的重复操作
实现方案
核心逻辑是把需要持久记录的基准日期变量放到点击事件的外层作用域,只初始化一次,每次点击时直接更新这个变量的值,不会被重复重置。
完整代码如下:
// 日期累加方法全局只定义一次,不要放在点击回调内 Date.prototype.addDays = function(days) { const target = new Date(this.valueOf()); target.setDate(target.getDate() + days); return target; } // 基准日期放在事件外层,仅初始化一次 // 要从指定日期开始就传入对应日期字符串,比如示例的2022-07-18;要从当前日期开始就直接写new Date() let baseDate = new Date('2022-07-18'); // 绑定点击事件 .on('click', '.change-date-button', function () { // 每次点击在上一次日期基础上累加天数,更新基准日期 // 累加7天传7,累加3天传3,递减传负数即可,比如-7就是每次回退7天 baseDate = baseDate.addDays(7); // 按dd/mm/yyyy格式格式化输出 const day = String(baseDate.getDate()).padStart(2, '0'); const month = String(baseDate.getMonth() + 1).padStart(2, '0'); // 月份默认从0开始计数,需要+1 const year = baseDate.getFullYear(); console.log(`${day}/${month}/${year}`); })
效果验证
如果初始基准日期设为2022年7月18日,累加步长设为3:
- 第一次点击输出
21/07/2022 - 第二次点击输出
24/07/2022 - 后续点击会在之前的日期基础上持续累加,不会重复返回固定日期
步长设为7时,每次点击日期会往后顺延7天,满足周度切换的需求。
内容的提问来源于stack exchange,提问作者Ivan Kharkivskyi
相关产品推荐
相关产品推荐

