Это зависит от нескольких разных вещей, но я буду исходить из того, как настроен мой сайт. В моей пользовательской модели есть столбец с именем часовой пояс, пример того, как часовые пояса хранятся в этом столбце: «США/Центральный».
Я бы сделал это, собрав массив имен часовых поясов, которые в настоящее время находятся в определенном временном диапазоне, а затем запросив таблицу User.
zones = ActiveSupport::TimeZone.zones_map.values.
map { |z| z.name if (8..20).cover?(z.now.hour) }.compact
users = User.where(timezone: zones)
Часть «zones_map.values» выведет список всех часовых поясов, затем мы сопоставим их так, чтобы возвращались только имена тех, у которых в настоящее время есть час, который находится между 8:00 (8) и 8:00 (20:00). Затем мы используем массив, возвращенный картой, в запросе для пользователей.
Таким образом, «z.now» даст нам текущее время в этом часовом поясе, и мы используем «(8..20).cover?» чтобы увидеть, находится ли «z.now.hour» в диапазоне от 8 до 20.
** Часы выше 12 не будут сбрасываться на 1, а будут продолжаться как 13, 14 и т. д.
Не уверен, что есть более быстрый/эффективный способ, но именно так я нашел способ, чтобы он оставался запросом и избегал зацикливания всех пользователей.
person
MTarantini
schedule
22.03.2016
Object.created_at.in_time_zone('Eastern Time (US)')
, а затем вы можете проверить между? (9... 5) этот объект datetime, чтобы проверить дневное время. - person Muhammad Yawar Ali   schedule 22.03.2016