Time.now.beginning_of_week给出两个不同的值

时间:2016-02-29 18:22:34

标签: ruby-on-rails ruby date datetime ruby-on-rails-4

我正在尝试从表中获取一周的数据,如下所示

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日星期一时。

希望有人可以澄清我的疑问。

1 个答案:

答案 0 :(得分:2)

当您在控制台中解锁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中获得beginning_of_week。您可以在rails 4中执行以下操作4.不确定这是否适用于rails 3。

Date.today.beginning_of_week.to_time(:utc) # o/p 2016-02-29 00:00:00 UTC