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
逻辑说明
order_datetime AT TIME ZONE 'UTC':把无时区的timestamp字段识别为UTC时间AT TIME ZONE 'Asia/Kolkata':将UTC时间转换为加尔各答时区的时间date():提取转换后的日期,这样就和用户本地的日期一致了
额外验证
你当前代码里l Date.current已经正确获取了应用时区的日期,这部分不需要修改,确保搜索框显示的是加尔各答时区的当前日期即可。
内容的提问来源于stack exchange,提问作者Manivannan Jeganathan
相关产品推荐
相关产品推荐

