Ruby DateTime:下一个下午5:15(或类似)

sha*_*wat 5 ruby time datetime ruby-on-rails ruby-on-rails-4

因此,给定DateTime对象和固定时间,我想在给定的DateTime对象之后获得下一次固定时间的出现.

  • 例如,鉴于2016年3月14日,下午4:00和下午5:15的时间,我想在2016年3月14日下午5:15返回.

  • 但是,鉴于2016年3月14日,下午6:00和下午5:15的时间,我想要返回2016年3月15日下午5:15,因为这是下一次发生的事情.

到目前为止,我已经编写了这段代码:

# Given fixed_time and date_time

new_time = date_time
if fixed_time.utc.strftime("%H%M%S%N") >= date_time.utc.strftime("%H%M%S%N")
  new_time = DateTime.new(
    date_time.year,
    date_time.month,
    date_time.day,
    fixed_time.hour,
    fixed_time.min,
    fixed_time.sec
  )
else
  next_day = date_time.beginning_of_day + 1.day
  new_time = DateTime.new(
    next_day.year,
    next_day.month,
    next_day.day,
    fixed_time.hour,
    fixed_time.min,
    fixed_time.sec
  )
end

# Return new_time
Run Code Online (Sandbox Code Playgroud)

它有效,但有更好的方法吗?

Bor*_*aMa 6

我只需要构建一次新的日期时间,如果需要,可以添加1天:

# Given fixed_time and date_time
new_date_time = DateTime.new(
  date_time.year,
  date_time.month,
  date_time.day,
  fixed_time.hour,
  fixed_time.min,
  fixed_time.sec
)

# add 1 day if new date prior to the given date
new_date_time += 1.day if new_date_time < date_time
Run Code Online (Sandbox Code Playgroud)