如何在ruby中获取未来最近的时间



假设我们有当前时间,然后将60弹药添加到当前时间。

Time.now + 1.hours
# => 2022-11-01 16:47:02.965861 +0500

在那之后,我们将获得接下来的半小时,如17:00:00

我可以从这个代码中获得前半小时的时间,但找不到下半小时。

time = Time.now - 30.minutes
# => 2022-11-01 15:22:59.942013 +0500
Time.at((time.to_time.to_i/1800).round * 1800).to_datetime
# => Tue, 01 Nov 2022 15:00:00 +0500

如果我正确理解你,你想映射:

  • 15:00-15:29至17:00
  • 15:30-15:59至17:30

您可以使用条件和advancechange:

t = Time.current
if t.min < 30
t.advance(hours: 2).change(min: 0)
else
t.advance(hours: 1).change(min: 30)
end

据我所知,您希望将时间四舍五入到下一个30分钟标记,即如果时间在5:01 and 5:29之间,您希望使其成为5:30

为此,你可以只做

time = Time.now + 1.hours
ceil_minutes = 30.minutes
Time.at((time.to_f / ceil_minutes).ceil * ceil_minutes)

最新更新