gpt4 book ai didi

ruby-on-rails - 使用Date.today查询返回两天

转载 作者:行者123 更新时间:2023-12-03 18:29:27 24 4
gpt4 key购买 nike

问题是下面的查询从两个日期返回项目,就像today / now涵盖了两天,而该查询仅返回一天的项目:

Ticket.where("DATE(created_at) = DATE(?)", Time.now.localtime.to_date).map(&:created_at)
CACHE (0.0ms) SELECT "tickets".* FROM "tickets" WHERE (DATE(created_at) = DATE('2014-12-30'))
=> [Mon, 29 Dec 2014 23:15:19 UTC +00:00,
Mon, 29 Dec 2014 23:17:48 UTC +00:00,
Mon, 29 Dec 2014 23:18:23 UTC +00:00,
Mon, 29 Dec 2014 23:18:28 UTC +00:00,
Mon, 29 Dec 2014 23:19:14 UTC +00:00,
Mon, 29 Dec 2014 23:20:08 UTC +00:00,
Tue, 30 Dec 2014 00:11:44 UTC +00:00,
Tue, 30 Dec 2014 00:12:12 UTC +00:00,
Tue, 30 Dec 2014 00:14:15 UTC +00:00,
Tue, 30 Dec 2014 00:15:35 UTC +00:00]


在上面的查询中, Time.now.localtime.to_date返回与 Time.now.to_date完全相同,而 Date.today则返回。这可能与我在UTC + 1时区有关:

[50] pry(#)> Time.now
=> 2014-12-30 14:03:18 +0100
[51] pry(#)> Time.now.localtime
=> 2014-12-30 14:03:47 +0100
[52] pry(#)> Time.now.localtime.utc
=> 2014-12-30 13:03:52 UTC


Time.now等于 Time.now.localtime因为我已使用 config/application.rb中的以下代码将activerecord设置为本地时间的时间戳:

config.active_record.default_timezone = :local


这是开发环境中使用sqlite3和rails 4.1.7的本地计算机上的数据库。

最佳答案

所以有什么问题?
您已将默认时区设置为本地,因此您将从数据库中获得与您的时区相关的答案,因为

Mon, 29 Dec 2014 23:15:19 UTC +00:00




Tue, 30 Dec 2014 00:15:35 UTC +00:00


放置在您的 Tue, 30 Dec 2014时区的同一天( UTC+1

默认情况下,时间戳始终为UTC。
如果您100%确保仅在一个时区使用您的应用程序,并且您确实要重新定义默认值,请转到以下答案: https://stackoverflow.com/a/15306358/3310560

否则,如果使用active_record,最好将日期与自身进行比较,而不要使用原始SQL。

关于ruby-on-rails - 使用Date.today查询返回两天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27706237/

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