我的导轨应用程序中有车型。它有三列名为' arrival_date',' arrival_time'和' parking_address'。一个人不能在停车位停放超过4小时的车辆。我想今天展示所有未来的停车和停车场。但是今天它应该显示当前停放或停放的所有车辆。以下逻辑可能会清楚我想说的是什么,
<% if (vehicle.arrival_date == Date.current)%>
<% if Time.now < (vehicle.arrival_time + 4.hours) %>
<%= vehicle.arrival_time %>
<% end %>
<% else %>
<%= vehicle.arrival_time %>
<% end %>
以上代码将显示将来停放的所有车辆。逻辑和一切正常但我无法弄清楚时区问题。我正在存储&#39; arrival_time&#39;在我的服务器上以UTC格式,并且created_at也存储为UTC时间。当我的美国客户(太平洋标准时间)尝试访问/车辆时,它没有列出车辆。借助于“停车场”#ad;&#39;我能够获得区域。之后我将代码更改为以下行,
a = Geokit::Geocoders::GoogleGeocoder.geocode property.address
lat_long_arr = a.ll.split(',').flatten
unless lat_long_arr.blank?
Timezone::Lookup.config(:geonames) do |c|
c.username = 'xyz'
c.offset_etc_zones = true
end
timezone = Timezone.lookup(lat_long_arr[0], lat_long_arr[1])
<% if (vehicle.arrival_date.in_time_zone(timezone)) == Date.current.in_time_zone(timezone))%>
<% if Time.now.in_time_zone(timezone) < (vehicle.arrival_time.in_time_zone(timezone) + 4.hours)) %>
<%= vehicle.arrival_time %>
<% end %>
<% else %>
<%= vehicle.arrival_time %>
<% end %>
它仍然不适合我。我可以在印度看到正确的结果。我也不想基于用户计算机获取区域我假设用户正在从#parking; parking_address&#39;区域访问它。