Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中,如何将随机日期时间四舍五入到小时开始?_Ruby On Rails_Ruby_Date_Datetime - Fatal编程技术网

Ruby on rails 在Rails中,如何将随机日期时间四舍五入到小时开始?

Ruby on rails 在Rails中,如何将随机日期时间四舍五入到小时开始?,ruby-on-rails,ruby,date,datetime,Ruby On Rails,Ruby,Date,Datetime,基本上,我希望得到去年的随机日期时间: rand(1.year).ago #=> Sun, 22 Sep 2013 18:37:44 UTC +00:00 (example) 但我该如何指定或限制这一时间?例如: Sun, 22 Sep 2013 18:00:00 UTC +00:00 Sat, 02 Nov 2013 10:00:00 UTC +00:00 Fri, 12 Apr 2013 21:00:00 UTC +00:00 试试这个: def random_time_to_n

基本上,我希望得到去年的随机日期时间:

rand(1.year).ago  #=> Sun, 22 Sep 2013 18:37:44 UTC +00:00 (example)
但我该如何指定或限制这一时间?例如:

Sun, 22 Sep 2013 18:00:00 UTC +00:00
Sat, 02 Nov 2013 10:00:00 UTC +00:00
Fri, 12 Apr 2013 21:00:00 UTC +00:00
试试这个:

def random_time_to_nearest_hour
  time = rand(1.year).ago
  time - time.sec - 60 * time.min
end
示例:

[1] pry(main)> random_time_to_nearest_hour
=> Sun, 28 Apr 2013 16:00:00 UTC +00:00
[2] pry(main)> random_time_to_nearest_hour
=> Sat, 08 Jun 2013 15:00:00 UTC +00:00
[3] pry(main)> random_time_to_nearest_hour
=> Thu, 22 Aug 2013 23:00:00 UTC +00:00
[4] pry(main)> random_time_to_nearest_hour
=> Tue, 29 Jan 2013 14:00:00 UTC +00:00
[5] pry(main)> random_time_to_nearest_hour
=> Tue, 13 Aug 2013 06:00:00 UTC +00:00
[6] pry(main)> random_time_to_nearest_hour
=> Mon, 03 Jun 2013 08:00:00 UTC +00:00
[7] pry(main)>

请注意,此方法将始终
floor
精确到最近的一小时,但由于您无论如何都在生成一个随机时间,因此此时间是否为
floor'ed
down或
round'ed
:)无关紧要

我终于找到了我要找的东西@斯多葛的答案很好,但我发现了这个可用的方法():


做了完全相同的事情,但看起来更整洁,不必编写自己的函数。

将datetime舍入到Rails中最接近的小时将是

(DateTime.now + 30.minutes).beginning_of_hour

不是实际问题的答案,但它确实回答了问题的标题(这就是我在这里的原因)。

您的意思是要确保生成的随机时间是在准确的钟声上?是的。或者我把这些时间循环到最近的一个小时。检查我找到的答案。真的很好:)不知道有
beginning\u of*
方法。在ruby 2.1.2中,对数字调用#ago是不赞成的。现在使用rand(1.year).seconds.ago.开始时间为小时@androv
ago
实际上是ActiveSupport的一部分,而不是核心ruby。在4.1中不赞成使用数字,在4.2中不允许使用。@Kelvin说得很对,谢谢你的更正-不允许我编辑我的评论。这个答案四舍五入,不到最近的一小时@安道洛夫的答案是正确的。
(DateTime.now + 30.minutes).beginning_of_hour