如何使用MomentJs/Dayjs判断无年份日期是否处于跨年的两个日期间
无年份日期区间校验实现方案
原生isBetween方法默认按同一年份的时间戳做比较,无法自动识别跨年度的无年份区间场景,可通过转年度累计天数的方案实现需求,核心逻辑如下:
将所有无年份的月日统一转换为当年的累计天数(一年中的第几天),分两种场景判断:
- 区间起始累计天数 < 区间结束累计天数:区间不跨年度,目标日期累计天数落在两者之间即符合要求
- 区间起始累计天数 > 区间结束累计天数:区间跨年度,目标日期累计天数大于等于起始天数 或 小于等于结束天数即符合要求
MomentJS 实现代码
// format参数可根据你的实际日期格式调整,默认是"月缩写/日"格式 function isDayOfYearBetween(target, start, end, format = 'MMM/DD') { // 统一固定为闰年2020,兼容2月29日的特殊场景 const targetDay = moment(target, format).year(2020).dayOfYear() const startDay = moment(start, format).year(2020).dayOfYear() const endDay = moment(end, format).year(2020).dayOfYear() if (startDay <= endDay) { return targetDay >= startDay && targetDay <= endDay } else { // 跨年度区间判断 return targetDay >= startDay || targetDay <= endDay } } // 调用示例,返回true isDayOfYearBetween('Apr/03', 'Nov/01', 'May/01')
DayJS 实现代码
使用前需先加载DayJS的dayOfYear插件:
import dayjs from 'dayjs' import dayOfYear from 'dayjs/plugin/dayOfYear' dayjs.extend(dayOfYear) function isDayOfYearBetween(target, start, end, format = 'MMM/DD') { const targetDay = dayjs(target, format).year(2020).dayOfYear() const startDay = dayjs(start, format).year(2020).dayOfYear() const endDay = dayjs(end, format).year(2020).dayOfYear() return startDay <= endDay ? targetDay >= startDay && targetDay <= endDay : targetDay >= startDay || targetDay <= endDay }
内容的提问来源于stack exchange,提问作者sina123456
相关产品推荐
相关产品推荐

