You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:36:01