Как округлить datetime до ближайшего часа в Rails?
в основном я хотел бы получить случайное 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
3 ответов
Я наконец нашел то, что искал. Ответ @Stoic очень хорош, но я нашел этот доступный метод (http://api.rubyonrails.org/classes/DateTime.html):
rand(1.year).ago.beginning_of_hour
делает то же самое, но выглядит аккуратнее и не позволяет вам писать свою собственную функцию.
округление datetime до ближайшего часа в Rails будет
(DateTime.now + 30.minutes).beginning_of_hour
Не ответ на фактический вопрос, но он отвечает на название вопроса (именно так я попал сюда).
попробуйте это:
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
вниз или становится round'ed
. :)