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

如何实现获取间隔内上/下一个对齐日期的算法

日期间隔对齐算法问题

示例基于Zig语言实现,但核心是通用的入门级算法问题

定义的结构体

日期结构体

假设我们有如下日期结构体:

const Date = struct {
    year: u16,
    month: u4, // 1=1月,12=12月
    day: u5,
};

间隔结构体

某事件按固定间隔重复发生(即每y年、m个月、d天触发一次),间隔的结构体定义如下:

const Interval = struct {
    years: i16,
    years_offset: i16,
    months: i16,
    months_offset: i16,
    days: i16,
    days_offset: i16,
};

规则说明

  • 月份和天数参数不受常规范围限制,例如可以设置为每5年、23个月、374天发生一次。
  • 计算下一个对齐日期时,需遵循以下顺序:
    1. 先按间隔偏移天数(需考虑起始月份的实际天数)
    2. 再偏移月份和年份,此过程中不修改日期数值
    3. 最后检查是否出现无效日期(如2月30日)

核心问题

若给定一个未对齐于该间隔的日期,如何计算得到其上一个/下一个对齐的日期?

示例说明

某事件从2024年1月4日开始,每2个月加3天发生一次,对应的对齐日期序列为:

  • 2024.01.04
  • 2024.03.07
  • 2024.05.10
  • 2024.07.13

如果给定日期2024.06.01,如何推导出上一个对齐日期2024.05.10和下一个对齐日期2024.07.13?

可用工具说明

Date结构体提供以下方法和辅助函数:

  • 日期偏移方法:shiftDays、shiftMonths、shiftYears
  • 辅助函数:isLeapYear(year)(判断闰年)、.daysInMonth()(获取当前月份的天数)
    无其他更复杂的工具可用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:27:13