【问题标题】:Rails query find result with partiular day with where cluaseRails 使用 where 子句查询特定日期的结果
【发布时间】:2015-06-10 08:13:41
【问题描述】:

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

这是特别的一天:

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”之间确认

【问题讨论】:

  • 您要比较日期还是日期时间?
  • 我想和日期时间比较。
  • value = today.to_time.beginning_of_day()..today.to_time.end_of_day()

标签: ruby-on-rails time zone


【解决方案1】:

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

今天 = Time.zone.now.to_time

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

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您使用的是哪个数据库?

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

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

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

    【讨论】:

    • 谢谢,我正在使用 PG。
    猜你喜欢
    • 1970-01-01
    • 2021-05-20
    • 2018-09-12
    • 1970-01-01
    • 2021-01-10
    • 2014-08-24
    • 1970-01-01
    • 2021-04-07
    • 2015-12-17
    相关资源
    最近更新 更多