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

跨年度日期范围下,周/季度/月/日的归属校验需求

跨年度日期归属校验功能完善与实现

需求说明

需实现四类日期归属校验功能:

  • 判断指定年份的某一周是否处于startDate与endDate之间
  • 判断指定年份的某一季度是否处于该日期范围
  • 判断指定年份的某一月是否处于该日期范围
  • 判断指定日期是否处于该日期范围

现有问题

现有代码仅在startDate与endDate同年时有效,跨年度场景下逻辑失效,需完善已有ForWeek、ForQuarter、ForDay函数,并补充实现ForMonth函数。

完善后的各函数实现

ForWeek函数(修复跨年度逻辑)

void ForWeek(int year, int week) 
{
    // 参数合法性校验
    if (week < 1 || week > 53)
        throw new ArgumentOutOfRangeException(nameof(week), "周数必须在1-53之间");

    // 获取目标周的起始和结束日期(ISO周以周一为起始)
    var targetWeekStart = ISOWeek.ToDateTime(year, week, DayOfWeek.Monday);
    var targetWeekEnd = targetWeekStart.AddDays(6);

    // 判断目标周与日期范围是否存在交集
    bool isInRange = !(targetWeekEnd < x.StartDate.Date || targetWeekStart > x.EndDate.Date);

    // 校验通过后的业务逻辑
    if (isInRange)
    {
        // TODO: 执行对应操作
    }
}

ForQuarter函数(修复跨年度逻辑)

void ForQuarter(int year, int quarter) 
{
    // 参数合法性校验
    if (quarter < 1 || quarter > 4)
        throw new ArgumentOutOfRangeException(nameof(quarter), "季度必须在1-4之间");

    // 计算目标季度的起始、结束日期
    int quarterStartMonth = (quarter - 1) * 3 + 1;
    var targetQuarterStart = new DateTime(year, quarterStartMonth, 1);
    var targetQuarterEnd = targetQuarterStart.AddMonths(3).AddDays(-1);

    // 判断目标季度与日期范围是否存在交集
    bool isInRange = !(targetQuarterEnd < x.StartDate.Date || targetQuarterStart > x.EndDate.Date);

    // 校验通过后的业务逻辑
    if (isInRange)
    {
        // TODO: 执行对应操作
    }
}

ForDay函数(修复逻辑错误与跨年度支持)

void ForDay(DateTime day)
{
    // 判断指定日期是否在目标范围内
    bool isInRange = day.Date >= x.StartDate.Date && day.Date <= x.EndDate.Date;

    // 校验通过后的业务逻辑
    if (isInRange)
    {
        // TODO: 执行对应操作
    }
}

ForMonth函数(补充实现,支持跨年度)

void ForMonth(int year, int month)
{
    // 参数合法性校验
    if (month < 1 || month > 12)
        throw new ArgumentOutOfRangeException(nameof(month), "月份必须在1-12之间");

    // 计算目标月份的起始、结束日期
    var targetMonthStart = new DateTime(year, month, 1);
    var targetMonthEnd = targetMonthStart.AddMonths(1).AddDays(-1);

    // 判断目标月份与日期范围是否存在交集
    bool isInRange = !(targetMonthEnd < x.StartDate.Date || targetMonthStart > x.EndDate.Date);

    // 校验通过后的业务逻辑
    if (isInRange)
    {
        // TODO: 执行对应操作
    }
}

内容的提问来源于stack exchange,提问作者Steven2105

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:53:20