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

标签 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 号星期一。

希望有人能解答我的疑惑。

最佳答案

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

相关文章:

php - Laravel: 如何使用 Eloquent 查询数据库中特定日期 (dd/mm/yyy)

java - 有没有比将 leniency 设置为 false 更严格的日期解析方法?

ruby-on-rails - Rails 3 ActiveRecord API : . 构建方法

ruby-on-rails - 获取大量图像,确定它们是否损坏

ruby-on-rails - 如何从 RSpec 获取当前测试文件名?

mysql - Rails ActiveRecord,从连接表中选择不同的字段并返回所有模型

ruby-on-rails - Ruby on Rails 的最后 20%

ruby - 正面前瞻和非捕获组差异

ruby-on-rails - 无法访问类 nil Rails 4 的对象

mysql - SQL当前系统日期