在使用时区方面不太有信心,在这方面寻求一些帮助
我有一个 cron 作业,每隔一段时间检查一次用户,它调用 rake 任务。在此 rake 任务中,我查询用户并根据条件向每个用户发送一封电子邮件。
我有每个用户的时区信息。我想对那些仅返回当前白天用户的用户进行查询
如何实现这一目标?
Best
这取决于一些不同的因素,但我将按照我的网站的设置方式进行。我的用户模型有一个名为时区的列,时区存储在该列中的示例为:“美国/中部”
我将通过将当前在特定时间范围内的时区名称数组放在一起,然后查询用户表来解决此问题。
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) 之间的时区的名称。然后,我们在用户查询中使用映射返回的数组。
因此“z.now”将为我们提供该时区的当前时间,我们使用“(8..20).cover?”查看“z.now.hour”是否在 8 到 20 之间。
** 12 点以上的时间不会重置为 1,而是继续为 13、14 等。
不确定是否有更快/更有效的方法,但这是我发现的保持查询并避免循环所有用户的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)