Ruby on Rails通过查询日期将数据从UTC转换为用户的数据库时区来检索日期时间

时间:2014-11-23 18:43:54

标签: ruby-on-rails ruby activerecord

我的应用程序将用户的出勤日期时间存储为2014-11-23 08:42:00,将其转换为UTC,应用程序具有自定义搜索方法,仅通过输入日期作为2014-11-23来搜索出席。 现在的问题是我有不同的时间参加2014-11-23的日期和Rails通过转换为UTC存储它。因此,对于2记录,它将被转换,日期将更改为2014-11-22。

我的搜索查询是2014-11-23,预期结果是全部5条记录,但只获得3条记录。 没有得到其他2因为他们被转换为2014-11-22

如何输入2014-11-23才能获得全部5条记录? 请帮忙。

1 个答案:

答案 0 :(得分:1)

如果您存储日期时间,则可以使用时区时间beginning_of_dayend_of_day方法将其用于该查询

date = Time.parse('Wed, 19 Nov 2014 19:23:59 UTC +00:00')
# => 2014-11-19 19:23:59 UTC
d = date.in_time_zone('Paris')
# => Wed, 19 Nov 2014 20:23:59 CET +01:00


User.where(created_at: (d.beginning_of_day..d.end_of_day)).count
#   (46.5ms)  SELECT COUNT(*) FROM "users"  WHERE ("users"."created_at" BETWEEN '2014-11-18 23:00:00.000000' AND '2014-11-19 22:59:59.999999')