rails //在白天按时区查询

Ben*_*Ben 5 ruby timezone activerecord ruby-on-rails

在使用时区时,并没有那么自信,在这个问题上寻求帮助

我有一个cron作业,每隔一段时间检查一次用户,这会调用一个rake任务.在此rake任务中,我查询用户并根据条件发送每个电子邮件.

我有每个用户的时区信息.我想对那些只返回当前白天用户的用户进行查询

如何实现这一目标?

最好

MTa*_*ini 3

这取决于一些不同的因素,但我将按照我的网站的设置方式进行。我的用户模型有一个名为时区的列,时区存储在该列中的示例为:“美国/中部”

我将通过将当前在特定时间范围内的时区名称数组放在一起,然后查询用户表来解决此问题。

zones = ActiveSupport::TimeZone.zones_map.values.
  map { |z| z.name if (8..20).cover?(z.now.hour) }.compact
users = User.where(timezone: zones)
Run Code Online (Sandbox Code Playgroud)

“zones_map.values”部分将拉回所有时区的列表,然后我们将它们映射为仅返回当前时间介于上午 8 点 (8) 和晚上 8 点 (20) 之间的时区的名称。然后,我们在用户查询中使用映射返回的数组。

因此“z.now”将为我们提供该时区的当前时间,我们使用“(8..20).cover?” 查看“z.now.hour”是否在 8 到 20 之间。

** 12 点以上的时间不会重置为 1,而是继续为 13、14 等。

不确定是否有更快/更有效的方法,但这是我发现的保持查询并避免循环所有用户的方法。