1

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

这是特别的一天:

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-09 18:30:00.000000”和“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”之间确认

4

2 回答 2

1

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

今天 = Time.zone.now.to_time

值 = today.beginning_of_day()..today.end_of_day()

我希望这有帮助。

于 2015-06-10T08:27:11.287 回答
1

您使用的是哪个数据库?

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

这意味着在 ActiveRecord 对象上设置的所有 和Time值都将作为. 然后,Rails 会在每次读取或写入值时,使用 的当前值(例如,对于当前的 Web 请求)注意应用和删除正确的偏移量。DateTimeTimeWithZoneUTC
Time.zone

只需检查文档TimeWithZone并考虑您的WHERE条款中应该包含的内容。这可能取决于特定的上下文,但您可能必须在查询中使用 UTC 值。

于 2015-06-10T08:37:20.633 回答