Как округлить время до ближайших 15 минут в Ruby? - PullRequest
61 голосов
/ 16 января 2009

Есть ли простой способ округлить время до ближайших 15 минут?

Это то, чем я сейчас занимаюсь. Есть ли более простой способ сделать это?

t = Time.new
rounded_t = Time.local(t.year, t.month, t.day, t.hour, t.min/15*15)

Ответы [ 12 ]

2 голосов
/ 01 февраля 2011

Ответ Чака, хотя и изящен, доставит вам неприятности, если вы попытаетесь сравнить полученные таким образом значения; usecs не обнуляется.

Ответ Шалманеса позаботится об этом, или ответ Чака можно изменить как:

t = Time.new
truncated_t = Time.at(t.to_i - t.sec - t.min % 15 * 60)
1 голос
/ 16 января 2009

Ваша текущая оценка с использованием

min / 15 * 15 

только усекает мин, поэтому

15 => 15
16 => 15
..
29 => 15
30 => 30 

Что не является «округлением».

Вы можете приблизительным образом округлить с помощью

(( min + 7.5 ) / 15).to_i * 15 

Или, используя внутреннее устройство:

( min.to_f / 15 ).round * 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...