Ruby中基于expiry_date判断可重考日期范围的实现方法
Ruby (with ActiveSupport): 判断当前日期是否处于测试创建后3-5年区间(仅已知expiry_date)
正确的条件判断代码
使用ActiveSupport的日期扩展,以下两种方式均可实现精确到天的判断:
方法1:用between?(更简洁直观)
current_date = Date.today current_date.between?(expiry_date - 2.years, expiry_date)
方法2:用比较运算符
current_date = Date.today current_date >= expiry_date - 2.years && current_date <= expiry_date
逻辑推导
已知expiry_date = 创建日期 + 5年,我们需要验证当前日期是否处于创建后3年到创建后5年的区间:
- 推导区间边界:
- 创建后3年 = 创建日期 + 3年 = (expiry_date - 5年) + 3年 = expiry_date - 2年
- 创建后5年 = 创建日期 + 5年 = expiry_date
- 只需确认当前日期落在
expiry_date - 2年到expiry_date之间(包含两端日期)
示例验证
给定expiry_date = Mon, 25 Mar 2024:
- expiry_date - 2年 = Mon, 25 Mar 2022(对应创建后3年的节点)
- 当前日期为2023-03-25 → 落在区间内,返回
true - 当前日期为2021-03-25 → 未到创建后3年,返回
false - 当前日期为2024-03-25 → 刚好到期,返回
true
错误代码问题分析
原代码直接将expiry_date与3.years.ago/5.years.ago比较,逻辑完全偏离需求:它判断的是过期日期是否在3-5年前,而非当前日期是否处于允许重写的时间窗口。
内容的提问来源于stack exchange,提问作者Japie Van schalkwyk
相关产品推荐
相关产品推荐

