我有一个背景工作,每15分钟运行一次,并产生提醒邮件。我想要创建一个查询,返回所有保存了特定时间的用户,并尊重该时间对时区设置的影响。
所以我有一个User模型存储:
:time:用户提醒时间(如17:00:00 ):string:他们的时区(如EST )因此,如果作业在17:00:00 EST运行,它将返回设置为:
reminder_time: 17:00:00,time_zone: ESTreminder_time: 13:00:00,time_zone: PST构建该查询的最佳方法是什么?能否一蹴而就,依靠Postgres来处理这项工作?我是否必须错开它,按每个时区分组,并在Ruby中为每个时区做数学运算?
目前,我把这个设置作为不考虑时区的ActiveRecord范围,现在我正在尝试添加这个考虑。
scope :receives_reminder_at, -> (time) do
ready.where(reminder_time: time)
end发布于 2016-07-25 22:01:53
在处理多时区中的用户时,通常最容易在UTC上标准化。
因此,将reminder_time存储在UTC中,这样在查询时不必担心TZ,因为它们都将标准化为UTC。(假设您正在运行您的服务器,UTC。它将如预期那样工作)。然后,您只需使用他们的TZ偏移量,以便调整他们的观看时间。
发布于 2016-07-25 19:21:14
您可以使用对用户模型的选择。类似于:
User.select{|user| user.time == time_the_job_runs.in_time_zone(user.string)}您应该替换"time_the_job_runs“。我不清楚该怎么得到它。但是in_time_zone方法应该是要根据时区字符串转换时间的方法。希望它能帮上忙,谢谢!
发布于 2017-03-30 12:24:21
只是遇到了同样的问题。找到了如何制作它的文章,只是如何思考如何自己解决它。但有现成的密码。https://robots.thoughtbot.com/a-case-study-in-multiple-time-zones
主要目的是:
https://stackoverflow.com/questions/38575484
复制相似问题