You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 6+PostgreSQL时区配置导致日期搜索无结果问题

问题解决方法

问题根源

你的数据库存储的order_datetime是UTC时间,但搜索时直接用date(order_datetime)取的是UTC日期,和用户所在的加尔各答时区(UTC+5.5)的日期不匹配。比如用户提交的加尔各答时间2024-08-12 01:42存成UTC的2024-08-11 20:12,date(order_datetime)得到的是2024-08-11,自然搜不到用户要的2024-08-12。

解决方案

修改模型里的Ransack自定义查询逻辑,让数据库在转换日期时使用加尔各答时区,而不是UTC。

修改sale.rb中的代码:

order_datetime_eq do
  Arel.sql("date(order_datetime AT TIME ZONE 'UTC' AT TIME ZONE 'Asia/Kolkata')")
end

逻辑说明

  1. order_datetime AT TIME ZONE 'UTC':把无时区的timestamp字段识别为UTC时间
  2. AT TIME ZONE 'Asia/Kolkata':将UTC时间转换为加尔各答时区的时间
  3. date():提取转换后的日期,这样就和用户本地的日期一致了

额外验证

你当前代码里l Date.current已经正确获取了应用时区的日期,这部分不需要修改,确保搜索框显示的是加尔各答时区的当前日期即可。

内容的提问来源于stack exchange,提问作者Manivannan Jeganathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:22:04