我想要确认特定日期的订单。
这是特别的一天:
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'
答案 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对象上设置的所有Time
,DateTime
和TimeWithZone
值都将以UTC
的形式写入数据库。
每次使用Time.zone
的当前值(例如,针对当前Web请求)读取或写入值时,Rails将注意应用和删除正确的偏移。
只需查看TimeWithZone
的{{3}},然后考虑WHERE
条款中的内容。
它可能取决于特定的上下文,但您可能必须在查询中使用UTC值。