rails//白天按时区查询



在使用时区时没有那么自信,正在寻找有关这一的帮助

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

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

如何实现这一点?

最佳

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

为此,我将把当前在某个时间范围内的一组时区名称放在一起,然后查询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点(8)到晚上8点(20)之间的时区的名称。然后,我们在查询中为用户使用map返回的数组。

因此,"z.now"将给我们该时区的当前时间,我们使用"(8..20).ccover?"看看"z.now.h"是否在8到20之间。

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

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

最新更新