Ich habe alle Zeitzone Informationen, die benötigt wird, und es speichert alle Informationen korrekt nach this railscast. Alles funktioniert gut für alle normalen Zwecke wie die Anzeige der Zeit in einer Tabelle, aber ich frage mich, wie ich die folgenden in die gespeicherte Zeitzone current_users
konvertieren kann.ruby on rails Konvertierung in Benutzer Zeitzone
Ich habe eine die Gesamtzahl der Anrufe findet stündlich:
Calls.count(:group => DATE_PART('hour', start_time),
:conditions => ["start_time BETWEEN ? AND ?", start, finish]
Diese Abfrage in allen alle Anrufe zieht, die in einer Stunde zwischen Start- und Zielzeit gemacht wurden. Die einzige Sache ist, dass es die Zeit in der Datenbank zurückzieht, die als UTC gespeichert wird. Ich schrieb meine eigene kleine Umwandlungsmethode mit Time.now.utc_offset
, aber erkannte, dass das nicht funktionieren würde. Was wäre eine gute Möglichkeit, die gespeicherten Benutzer time_zone
mit dem zu vergleichen, was aus der Datenbank kommt, und fügen Sie die utc_offset
hinzu.
Die time_zone
wird als String in der Datenbank Eastern Time (US & Kanada) gespeichert.
Was ist der beste Weg dies herauszufinden, ich kann ändern, um den Offset des Benutzers in der Datenbank zu speichern, aber bevor ich gehe, würde ich lieber sehen, ob es einen einfacheren Weg gibt.
bearbeiten
mehr klar sein, gibt die Abfrage einen Hash von Stunden und die Zählung. So zum Beispiel:
Hour Count
"5" 20
"6" 15
"7" 35
... ...
Die Stunde kommt zurück als UTC Stunde versetzt, muss ich diese Ziffer auf die Benutzer Zeitzone konvertieren, so zum Beispiel, wenn es Eastern Time (USA und Kanada), die Sie Schleife durch der Hash und add -4 zu der Stunde.
Edit 2
Dank Andy konnte ich dies ziemlich einfach herauszufinden. Das erste, was Sie tun möchten, ist das Zeitobjekt auf die Zeitzone des aktuellen Benutzers zu setzen. Also:
Time.zone = @current_user.time_zone
=> "Eastern Time (US & Canada)
hinzufügen dann den aktuellen Benutzers versetzt zur „Stunde“ in der Hash-
hour + Time.now.in_time_zone.utc_offset/3600
ziemlich selbsterklärend, aber das wird die Zeit der Zone, die Sie zuvor festgelegt und findet die UTC Versatz in Sekunden, deshalb teilen wir uns durch 3600.
Können Sie die Frage ein wenig klären? Möchten Sie nur die Start-/Endzeiten in Bezug auf die Zeitzone des Benutzers angeben oder möchten Sie nur eine UTC-Zeit in die Zeitzone des Benutzers nach der Abfrage konvertieren? – klochner
Konvertieren Sie die UTC-Zeit in die Zeitzone des Benutzers nach der Abfrage – Ryan