【问题标题】:Time.now.beginning_of_week giving two different valuesTime.now.beginning_of_week 给出两个不同的值
【发布时间】:2016-02-29 18:22:34
【问题描述】:

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

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

希望有人能澄清我对此的疑问。

【问题讨论】:

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


    【解决方案1】:

    当您在控制台中触发 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多