Ich habe eine Tabelle sessions
mit einem Datetime-Feld starts_at
. Die starts_at
ist in UTC gespeichert, aber ich möchte die Sitzungen sortiert nach Starts_at in Ortszeit und nur als eine Uhrzeit, nicht als Datetime.Verwenden einer Mysql-Funktion in einer Active Record-Order-Klausel
Also, wenn ich Sitzungen mit Datum Zeiten:
s1 Jan 1, 13:00
s2 Jan 2, 11:00
s3 Jan 1, 23:00
Ohne Zeitzonen bedenken, dass ich sie in dieser Reihenfolge zurück wollen würde: s2, s1, s3
.
Jetzt möchte ich alle utc mal in Ortszeit bekommen, weil wir sagen, dass die Zeitzone tatsächlich 2 Stunden zu utc hinzufügt. Die Reihenfolge von s2, s1, s3
wäre jetzt falsch. Wir würden s3, s2, s1 wollen.
Was ich versucht habe, ist:
Session.order("CONVERT_TZ(starts_at,'UTC', '#{tz}')")
und
Session.order("TIME(CONVERT_TZ(starts_at,'UTC', '#{tz}'))")
Wo tz = Time.now.strftime('%Z')
(vorher ich auch Time.now.zone auf die Zeitzone festgelegt, dass alle Die Sitzungen finden statt in)
Leider hat dies mir ungerade Resu gegeben Das scheint in keiner Reihenfolge zu sein.
Vielen Dank! Es sieht so aus, als ob man die Strings "UTC" und "PDT" passierte, das Problem, alles funktionierte, als ich die Stundenzahl überschritt. – xxyyxx