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

How to get the future nearest time in ruby

提问人:Rq Bhatti 提问时间:11/1/2022 最后编辑:Holger JustRq Bhatti 更新时间:11/1/2022 访问量:71

问:

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

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
Ruby-on-Rails 红宝石 日期时间

评论

0赞 Rq Bhatti 11/1/2022
让我再描述一下我的问题。添加 18 分钟后,我有当前时间(以 18:40 为单位),然后是 19:40,然后四舍五入到 20:00。
1赞 Stefan 11/1/2022
仅供参考,您可以使用一个编辑按钮来澄清您的问题。
0赞 Cary Swoveland 11/2/2022
最好至少等待几个小时后再选择答案,因为另一个答案可能会比您选择的答案更好(即使您可以更改选择),还因为快速选择可能会阻止发布其他答案。虽然不是在这种情况下,但读者有时会发现所选答案不正确。

答:

0赞 Abdul Rehman 11/1/2022 #1

据我了解,您想将时间四舍五入到接下来的 30 分钟标记,即如果它介于您想要完成它之间5:01 and 5:295:30

为此,你可以做

time = Time.now + 1.hours
ceil_minutes = 30.minutes

Time.at((time.to_f / ceil_minutes).ceil * ceil_minutes)
7赞 Stefan 11/1/2022 #2

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

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

您可以使用条件 and advancechange

t = Time.current

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