ruby-on-rails - 给定一个日期,我如何才能有效地计算给定序列中的下一个日期(每周、每月、每年)?

标签 ruby-on-rails ruby algorithm date

在我的应用程序中,我有各种日期序列,例如每周、每月和每年。给定过去的任意日期,我需要计算序列中的下一个 future 日期。

目前我使用的是次优循环。这是一个简化的示例(在 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

与其执行循环(循环虽然简单,但效率低下,尤其是在给定一个遥远的过去的日期时),我想通过计算日期之间的周数(或月数、年数)来使用日期算术来完成此操作两个日期,计算余数并使用这些值生成下一个日期。

这是正确的方法,还是我错过了一种特别聪明的“Ruby”方法来解决这个问题?还是为了简单起见,我应该坚持我的循环?

最佳答案

因为您将此问题标记为 ruby-on-rails,所以我想您正在使用 Rails。 ActiveSupport 引入了 calculation提供有用的 #advance 方法的模块。

date = Date.today
date.advance(:weeks => 1)
date.advance(:days => 7)
# => next week

关于ruby-on-rails - 给定一个日期,我如何才能有效地计算给定序列中的下一个日期(每周、每月、每年)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2317584/

相关文章:

ruby-on-rails - Rails has_one具有类名和外键

ruby-on-rails - Rails 数据库提示仅在生产中不存在(使用 db :migrate succeeded)

c - 构建数组并添加元素 'N' 次

ruby-on-rails - Rails 应用程序中的 Flash 消息错误?

javascript - 如何验证在tinymce(gem)编辑器rails应用程序中输入的字符数

algorithm - 计算算法的执行时间

algorithm - 给定算法的时间复杂度是多少?

ruby-on-rails - 守卫为什么要停下来?

ruby-on-rails - 从购物车中删除产品后无法将产品添加回产品模型,Ruby on rails

ruby-on-rails - Ruby/Rails 循环中的魔术第一个和最后一个指示器?