给定一个日期,我如何有效地计算给定序列中的下一个日期(每周,每月,每年)?

Oll*_*lly 2 ruby algorithm ruby-on-rails date

在我的应用程序中,我有各种日期序列,例如每周,每月和每年.鉴于过去的任意日期,我需要计算序列中的下一个未来日期.

目前我正在使用次优循环.这是一个简化的例子(在Ruby/Rails中):

def calculate_next_date(from_date)
  next_date = from_date
  while next_date < Date.today
    next_date += 1.week # (or 1.month)
  end
  next_date
end
Run Code Online (Sandbox Code Playgroud)

而不是执行一个循环(虽然简单,但效率很低,特别是在远处给出一个日期时)我想通过计算两个日期之间的周数(或几个月,几年)来进行日期算术,计算余数并使用这些值生成下一个日期.

这是正确的方法,还是我错过了一种特别聪明的"Ruby"解决方法?或者我应该坚持我的循环以简化这一切?

Sim*_*tti 15

因为您将此问题标记为ruby-on-rails,我想您正在使用Rails.ActiveSupport引入了计算模块,该模块提供了一种有用的#advance方法.

date = Date.today
date.advance(:weeks => 1)
date.advance(:days => 7)
# => next week
Run Code Online (Sandbox Code Playgroud)