Rails查询查找结果与partinular day with cluase

时间:2015-06-10 08:13:42

标签: ruby-on-rails time zone

我想要确认特定日期的订单。

这是特别的一天:

today = Time.zone.now

Wed, 10 Jun 2015 13:31:16 IST +05:30

这是特定日期的范围

value = today.beginning_of_day()..today.end_of_day()
Wed, 10 Jun 2015 00:00:00 IST +05:30..Wed, 10 Jun 2015 23:59:59 IST +05:30

但是当我执行它时,SQL查询日期范围会改变,

orders = Order.where(confirmed_at: value)

SELECT "orders".* FROM "orders" WHERE "orders"."confirmed_at" BETWEEN '2015-06-09 18:30:00.000000' AND '2015-06-10 18:29:59.999999' ORDER BY orders.confirmed_at DESC

在2015-06-06 18:30:00.000000' AND' 2015-06-10 18:29:59.999999'

但我希望在2015年6月10日星期三00:00:00 IST +05:30之间确认。2015年6月10日星期三23:59:59 IST +05:30'

2 个答案:

答案 0 :(得分:1)

今天你可以使用Time.zone.now.to_time。

today = Time.zone.now.to_time

value = today.beginning_of_day().. today.end_of_day()

我希望这会有所帮助。

答案 1 :(得分:1)

您使用的是哪个数据库?

ActiveRecord将使用不支持时区的数据类型声明时间列。例如,在Postgres中,它将使用timestamp without time zone

这意味着在ActiveRecord对象上设置的所有TimeDateTimeTimeWithZone值都将以UTC的形式写入数据库。
每次使用Time.zone的当前值(例如,针对当前Web请求)读取或写入值时,Rails将注意应用和删除正确的偏移。

只需查看TimeWithZone的{​​{3}},然后考虑WHERE条款中的内容。 它可能取决于特定的上下文,但您可能必须在查询中使用UTC值。