查找当前时间在rails中为x pm的记录



我正在使用主动支持来查找x点所在的时区。

time_zones = ActiveSupport::TimeZone.all.select{ |time| time.now.hour == x }

然后查找该时区的记录。

Record.where(time_zone: time_zones)

这些记录中的time_zone使用Geocoder gem (Geocoder.search("ip_addr"))设置。问题是Geocoder给出了一个time_zone值,如"Asia/Thimphu"但是在ActiveSupport列表(refer_this)中没有这样的值。在我的记录搜索中,它可能会跳过时区未在activessupport列表中列出的记录,尽管在那里是x pm。

如有任何解决方案,我将不胜感激。

您可以使用TimeZone类中的常量MAPPING来从Rails时区名称中获取TZInfo identifier

zones = ActiveSupport::TimeZone.all.select { |zone| zone.now.hour == x }
zone_identifiers = zones.map { |zone| ActiveSupport::TimeZone::MAPPING[zone.name] }
Record.where(time_zone: zone_identifiers)

从注释更新

也可以保存记录并使用映射获得标识符:

zones = ActiveSupport::TimeZone.all.select { |zone| zone.now.hour == x }
zone_identifiers = zones.map { |zone| IANA_TO_ACTIVERECORD_BULLSHIT_TIMEZONE_MAPPING.filter_map { |k, v| k if v == zone.name } }.flatten
Record.where(time_zone: zone_identifiers)

但是在数据库中保留Rails时区名称绝对更干净。

最新更新