2017-01-05 3 views
0

Ich versuche, die Zeit bis 12:00 Uhr in der Zeitzone Benutzer zu erhalten. Wie kann ich das in Schienen machen?bekommen Zeit bis Stunde in Benutzer Zeitzone

Ich möchte die Zeit bis 12:00 Uhr bekommen und dann diese Zeit zu der aktuellen Zeit in Schienen hinzufügen, um es in der Datenbank zu speichern, weil ich ein Feld mit der GMT-Zeit haben möchte, entspricht 12: 00.00 in der Benutzer Zeitzone

ich verwende dieses Juwel:

gem 'time_difference', '~> 0.5.0'

um die Zeitdifferenz zwischen zwei Zeitstempeln

TimeDifference.between(DateTime.now, created_at) 
zu erhalten

Aber ich bin nicht sicher, wie man die Zeit bis 12:00 Uhr in der Zeitzone des Benutzers bekommt.

Dank

Antwort

0

eine bestimmte Zeitzone gegeben, können Sie Rails' Werkzeuge für den Umgang mit Zeitzonen verwenden nur direkt, um herauszufinden, wenn Mitternacht für eine bestimmte Zeitzone. Dieses Beispiel setzt man eine time_zone Spalte auf Ihrem User-Modell mit einem entsprechenden Wert hat (zB America/Chicago, oder irgendetwas anderes Rails supports):

midnight_for_user = ActiveSupport::TimeZone[user.time_zone].now.midnight.tomorrow 

Zum Beispiel kann ich die gleiche Logik verwenden, um zu finden, wenn Mitternacht für a Person in New York:

pry(main)> Time.current 
=> Thu, 05 Jan 2017 10:34:02 CST -06:00 
pry(main)> ActiveSupport::TimeZone['America/New_York'].now.midnight.tomorrow 
=> Fri, 06 Jan 2017 00:00:00 EST -05:00 

Beachten Sie, dass ich morgen um Mitternacht suche; Denken Sie daran, dass "Mitternacht" für einen bestimmten Tag tatsächlich die erste Minute des Tages ist, nicht die letzte.

+0

Robert, vielen Dank. Wie kann ich dies verwenden, um im Grunde zu wissen, wie viele Stunden von GMT (Rails Standardzeit) ist Mitternacht für den Benutzer? Das verwirrt die Hölle aus mir heraus. Danke – Walker

+0

Du denkst, ich kann jetzt in Sekunden von GMT in Usertimezone konvertieren und dann den Unterschied in Sekunden zwischen Mitternacht in Usertimezone bis jetzt in Usertimezone finden und diese Sekunden in GMT hinzufügen? @RobertNubel – Walker

+0

@Walker könnten Sie, aber wenn Sie nur die Mitternacht des Benutzers in GMT speichern möchten, wird das Speichern von 'Mitternacht_für_Benutzer' wie oben berechnet zu einem Modell automatisch diese Zeit zu GMT in der Datenbank konvertieren. Wenn Sie die Konvertierung manuell durchführen möchten, rufen Sie einfach 'midnight_for_user.utc' auf (denken Sie daran, dass GMT und UTC identisch sind). –

Verwandte Themen