这是我的问题:我的记录存储在我的数据库中有UTC时区但是!我需要查询这些记录,并根据记录的时区在一天内返回所有内容,无论其UTC日期如何。
实施例
假设我在America/Denver
的星期二00:30上传了一条记录,我在America/Los_Angeles
星期一的00:30上传了一堆记录。< / p>
好吧,现在,当我查询星期一,一整天的记录时,我得到了那个星期二记录,因为America/Denver
中的00:30技术上是星期一America/Los_Angeles
。我正在运行原始SQL来尝试在我的Rails项目中解决这个问题,但是......没有骰子。
对此有何帮助?
SELECT
DATE(uploaded_at AT TIME ZONE 'UTC' AT TIME ZONE areas.iso_time_zone) as uploaded_at,
count(DISTINCT photos.id)
FROM photos, areas
WHERE photos.category IN ('landscape', 'family', 'animal', 'saucy', 'feet', 'portrait')
AND photos.uploaded_at
BETWEEN '2017-03-27 00:00:00 UTC' AND '2017-04-02 23:59:59 UTC'
GROUP BY DATE(uploaded_at AT TIME ZONE 'UTC' AT TIME ZONE areas.iso_time_zone)
ORDER BY DATE(uploaded_at AT TIME ZONE 'UTC' AT TIME ZONE areas.iso_time_zone);
答案 0 :(得分:0)
使用in_time_zone
方法。文档:http://apidock.com/rails/DateTime/in_time_zone
实施例。用法:
t = foo.start_time
=> 2000-01-01 14:20:00 UTC
t.zone
=> "UTC"
t.in_time_zone("America/New_York")
=> Sat, 01 Jan 2000 09:20:00 EST -05:00
您可以使用它来根据相应的时区转换时间,从而为您提供查询UTC记录的正确范围。
答案 1 :(得分:0)
我在这里添加了@ bkunzi01的回答:
现在无法找到记录的时区。因此,在您的行动中,您必须根据用户的时区或某些逻辑提供时区。
然后使用<section>
<center><h1><STRONG>Query Data</STRONG></h1></center>
<ul>
@foreach ($result as $results)
<li>Report Name = {{ $results->ReportName}} | Report ID = {{ $results->ReportID}} | Store Number = {{ $results->StoreNumber}} | Store Name = {{ $results->StoreName}} | Week Number = {{ $results->WeekNumber}} |
Year = {{ $results->Year}} | PerfumeName = {{ $results->PerfumeName}} | Units Sold = {{ $results->UnitsSold}} | Sales = {{ $results->Sales}}
</li>
<br>
@endforeach
</ul>
</section>
方法。文档:http://apidock.com/rails/DateTime/in_time_zone
实施例。用法:
in_time_zone
您可以使用它来根据相应的时区转换时间,从而为您提供查询UTC记录的正确范围。
答案 2 :(得分:-1)
您可以在WHERE子句中执行的操作。希望它有所帮助。
puts(
'reverse("abc") == "cba": ' + (reverse("abc") == "cba").to_s
)
puts(
'reverse("a") == "a": ' + (reverse("a") == "a").to_s
)
puts(
'reverse("") == "": ' + (reverse("") == "").to_s
)