如何在JavaScript中忽略年份判断日期是否属于10月1日至次年5月31日区间
阶梯费率日期区间判断方案
核心思路
JS的Date.getMonth()会返回0-11的0基月份数值,我们可以直接通过月份范围判断所属费率区间,完全不需要复杂的多条件拼接,且天然忽略年份影响:
- 冬季费率区间(6月1日-9月30日)对应月份返回值为
5、6、7、8 - 夏季费率区间(10月1日-次年5月31日)对应月份返回值为
0、1、2、3、4、9、10、11
代码实现
单个日期判断
// 判断是否属于冬季费率区间 const isWinterDate = (date) => { const month = date.getMonth() return month >= 5 && month <= 8 } // 判断是否属于夏季费率区间 const isSummerDate = (date) => !isWinterDate(date)
计费周期判断
针对整段计费周期判定需求,只要周期起止都属于对应区间即可判定:
// 判断整段周期是否属于夏季费率 const isSummerPeriod = (dateFrom, dateTo) => { return !isWinterDate(dateFrom) && !isWinterDate(dateTo) } // 判断整段周期是否属于冬季费率 const isWinterPeriod = (dateFrom, dateTo) => { return isWinterDate(dateFrom) && isWinterDate(dateTo) }
你提到的测试用例4月25日-5月22日,两个日期的getMonth()返回值分别为3、4,都不在冬季范围内,会正确判定为夏季费率,符合业务需求。
跨区间周期处理
如果出现周期跨两个区间的情况(比如5月30日-6月5日),可以根据业务规则扩展逻辑,比如按占比更高的区间计费、或者直接就高按冬季费率计费,都可以直接复用上面的基础判断方法。
内容的提问来源于stack exchange,提问作者akila
相关产品推荐
相关产品推荐

