= ?",16,72,Time.now.begi-6ren">
gpt4 book ai didi

ruby-on-rails - Time.now.beginning_of_week 给出两个不同的值

转载 作者:数据小太阳 更新时间:2023-10-29 09:01:03 24 4
gpt4 key购买 nike

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

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 console 中这个值是

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 格式的 beginning_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com