我正在尝试从表格中获取一周数据的值,如下所示
Answer.where("ct_id = ? AND ot_id = ? AND created_at >= ?",16,72,Time.now.beginning_of_week)
它触发一个查询
Answer Load (0.3ms) SELECT `answers`.* FROM `answers` WHERE (ct_id = 16 AND ot_id = 72 AND created_at >= '2016-02-28 18:30:00')
上述查询中的时间为“2016-02-28 18:30:00”
但在 Rails 控制台中,该值是
Time.now.beginning_of_week => 2016-02-29 00:00:00 +0530
那么哪个是正确的值,为什么当我在控制台中尝试它时它给出两个不同的值。
我知道 Time.now.beginning_of_week 从星期日(即 18 号)开始一周,但为什么当我在控制台中执行此操作时,它显示为 19 号星期一。
希望有人能解答我的疑惑。
最佳答案
当您在控制台中触发 Time.now.beginning_of_week
时,它会给出您本地时区的时间,即 +5.30(印度标准时间)。
数据库中存储的所有时间均以 utc 格式存储。
Answer.where("ct_id = ? AND ot_id = ? AND created_at >= ?",16,72,Time.now.beginning_of_week)
当我们在上面的查询中使用 Time.now.beginning_of_week
时,它将转换为 utc,因为我们需要与存储在 db 中的记录进行比较,该记录采用 utc。
要将以下时间 2016-02-29 00:00:00 +0530 转换为 utc 时间,我们必须从中减去 -5.30,因为它是 utc 的 +5.30。
Time in utc = 2016-02-29 (00:00:00 - 5.30)
Time in utc = 2016-02-29 18.30
更新:
如果你想获得 utc 中的 begin_of_week 。您可以在 Rails 4 中执行以下操作。不确定这是否适用于 Rails 3。
Date.today.beginning_of_week.to_time(:utc) # o/p 2016-02-29 00:00:00 UTC
关于ruby-on-rails - Time.now.beginning_of_week 给出两个不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35706724/