代表重复的日期

alu*_*umb 6 date

重复日期:

计费周期有很多不同的格式,例如:"本月的第一个","本月的第三个星期五",或"本月13日之后的第21个星期一或之后的第一个工作日"(感谢签证!) .我的目标是能够在一个易于解析的数据库文本字段中表示这些不同的计费周期.

alu*_*umb 0

目前的解决方案:

YYYY/MM/DD+YY/MM/DD+DOW
Run Code Online (Sandbox Code Playgroud)
  • 所有块(由 分隔+)以及每个块的所有部分都是可选的。
  • 第一个块表示开始日期
    • 如果为空 - 表示今天
    • 如果缺少部分 - 表示全部...即“//12”表示每月的 12 号。
    • 负数表示从期末开始计数..即“//-1”表示该月的最后一天
    • 超支将结转到下个月,即“//40”是该月第一天后的 40 天
  • 第二个块表示重复之间日期的变化
    • 如果为空 - 设置日期(从第一个块开始)
    • 添加当前部分 - 即“/1/”表示给定开始日期之后的每个月
  • 第三个块表示计算的日期应移动到星期几
    • 可用时间为[m,t,w,r,f,s,d,b](一周 7 天,“工作日”)

计算:

  • 计算从第一个块中指定的日期开始,用添加记录的日期填充缺失的部分。
  • 然后添加 DOW 以获得有效的开始日期。这是该活动的第一个日期。
  • 下一个日期的计算方法是将第二个块添加到最后计算的第一个块并添加 DOW 以获得下一个日期。

例子:

  • 2008年3月12日 - “2008/3/12”
  • 每月的第一天 - “//1+/1/”
  • 每月第三个星期五 - “//21+/1/+f”
  • 该月 13 日后第 21 天或之后的第一个工作日 - "//34+/1/+b"
  • 从今天开始每两周 - “+//14”
  • 从三月开始每第二个月的最后一天 - “/3/-1+/2/”