Die Logik tun unmöglich ist, auszuführen. Ohne die tatsächliche Zeitzone des Benutzers zu kennen, können Sie den UTC-Äquivalent von "gestern um 8 Uhr Ortszeit" nicht kennen. Sommerzeitübergänge können den Offset gestern gestern anders als den Offset heute machen. Weitere Informationen finden Sie unter time zone tag wiki, insbesondere Zeitzone! = Offset. Wenn Sie die Zeitzone des Benutzers kennen, können Sie diese Berechnung mit der Erweiterungsbibliothek moment timezone für Moment.js durchführen. Der Code würde wie folgt aussehen:
moment().tz('America/Los_Angeles').subtract(1, 'day')
.set({hours:8, minutes:0, seconds:0, milliseconds:0}).utc()
diesen Breaking down so macht es Sinn, wir folgende Dinge tun:
moment() //get the current time
.tz('America/Los_Angeles') //put the moment in the Los Angeles time zone
//the Los Angeles time zone is one of several that are UTC-7 right now
.subtract(1, 'day') //go to yesterday
.set({hours:8, minutes:0, seconds:0, milliseconds:0}) //set the time to exactly 8 am
.utc() //convert back to UTC
Sie zu Beginn des Tages 8 Stunden nicht hinzufügen. Dies wird 9 Uhr morgens sein, wenn die Uhren an diesem Tag "vorspringen", und 7 Uhr, wenn sie "zurückgefallen" sind.
Es klingt wie Ihr Code in Knoten auf dem Server ausgeführt wird. Wenn es im Browser läuft, dann weiß der Browser die Regeln Zeitzone des Benutzers, und man kann den folgenden Code verwenden, um die Zeit, um 8 Uhr gestern:
moment().subtract(1, 'day').set({hours:8, minutes:0, seconds:0, milliseconds:0}).utc()
Dieser Code erfordert nicht die Zeit Zeitzone add weil der Browser die Zeitzonenregeln für die lokale Zeit des Benutzers kennt.
Wenn Sie die Zeitzone des Benutzers benötigen, haben Sie einige Optionen. Am zuverlässigsten ist es, einen Zeitzonenwähler zu verwenden, der in eine Karte integriert ist, damit der Benutzer auswählen kann. Es gibt einige davon im Internet.
Wenn Sie dies nicht tun möchten, können Sie die Funktion moment.tz.guess()
verwenden, um eine Zeitzone zu erstellen, in der einige Heuristiken über die Zeitzone des Benutzers geschätzt werden. Diese Funktion ist gut, aber aufgrund der Einschränkungen des Browsers ist es unmöglich, sie zu 100% genau zu machen.
Für eine ganze Reihe von Informationen zum Umgang mit Datum, Uhrzeit und Zeitzonen in JavaScript können Sie versuchen, vor ein paar Monaten this talk I did at JavaScript MN.
Zusätzlich könnte Ihnen gefallen this really excellent Pluralsight course by Matt Johnson.
Ich dachte, das sollte ein arithmetisches Problem sein. Wo ist der Logikteil? – Mai
Der logische Teil ist, ich weiß nicht, ob es ein logisches oder ein arithmetisches Problem ist. Die Berechnung zwischen Lokal und UTC verwirrt mich sehr. – metalaureate
Könnten Sie ein Beispiel hinzufügen? Was sollte die Ausgabe sein, wenn die aktuelle UTC-Zeit "2016-01-10 0800" ist? – Rahul