rails //在白天按时区查询

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

我有一个cron作业,偶尔检查用户,这称为rake任务。 在此rake任务中,我查询用户并根据条件发送每个电子邮件。

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

如何实现这一目标?

最好

这取决于几个不同的东西,但我将根据我的网站设置方式。 我的用户模型有一个名为timezone的列,时区存储在该列中的方式示例如下:“US / Central”

我会通过将当前在特定时间范围内的时区名称数组合在一起,然后查询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’部分将拉回所有时区的列表,然后我们将它们映射到仅返回当前有一小时在8AM(8)和8PM(20)之间的那些名称。 然后,我们在查询中为用户使用map返回的数组。

所以’z.now’会给我们当前时间,我们使用’(8..20).cover?’ 看看’z.now.hour’是否在8到20之间。

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

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