2

我正在尝试找到一种方法,让我可以告诉 ransack 在涉及日期或日期范围的查询中使用特定时区。例如,ransack 默认使用 UTC 进行日期时间搜索,我想使用 PST 时区执行查询,我该怎么做?有任何黑客或配置吗?以下是生成的示例查询。

SELECT DISTINCT "orders".* FROM "orders" LEFT OUTER JOIN "customers" ON "customers"."id" = "orders"."customer_id" LEFT OUTER JOIN "payments" ON "payments"."order_id" = "orders "."id" 左外连接 "order_lines" ON "order_lines"."order_id" = "orders"."id" WHERE "orders"."test_transaction" = 'f' AND (("orders"."created_at" > = '2012-11-03 07:00:00.000000' AND "orders"."created_at" <= '2012-11-05 06:59:59.000000'))

谢谢

4

2 回答 2

1

不确定 Ransack 的细节,但通常如果您将 UTC 日期存储在数据库中,那么您应该按 UTC 值进行查询。

如果您的查询日期是太平洋时间,则在将它们传递到您的查询之前将它们转换为 UTC。您可以使用诸如timezoneTZInfoActiveSupport::TimeZone之类的 Ruby gem来进行转换。

于 2013-04-16T14:34:07.440 回答
0

它有点脏但有效

current_zone = Time.zone.name # Get default time zone
Time.zone = "UTC" #Change to whatever time zone you want. 
@search = Model.search(params[:q]) 
@objects = @search.result
Time.zone = current_zone #Set default time zone

在http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-local_to_utc检查时区

于 2014-03-02T00:27:19.837 回答