Momentjs Greifen heutige Datum und die aktuelle Einstellung der Zeit bewirkt, dass es schnell vorwärts 24 Stunden

Ich versuche zur Zeit Sie die E-Mail-Nachrichten basierend auf Benutzer-Einstellungen. Mein morgen Berechnungen korrekt sind, aber es ist am Abend E-Mails, die nie gesendet, weil Termine nicht verhält wie erwartet.

Erste, hier ist der code, den ich verwende, um schnappen Sie sich die Zeit und führen Sie Anpassungen basierend auf dem Standort der Benutzer, etc.

var time = moment();
var machineTZ = time.zone();
var userTZ = 420;
var diffTZ = userTZ - machineTZ;

var oneHour = moment(time).add('minutes', 60);

var morningRun = moment().startOf('day');
morningRun.hour(7).minute(0);
morningRun.add('minutes', diffTZ);

var eveningRun = moment().startOf('day');
eveningRun.hour(19).minute(30);
eveningRun.add('minutes', diffTZ);

Ich überprüfe jede Stunde, um zu sehen, wenn es ist Zeit, planen Sie eine weitere E-Mail zu gehen. Jetzt dies ist hart codiert, aber wenn ich beginne, zum hinzufügen von Benutzer-Einstellungen, Sie werden in der Lage sein zu wählen Ihre lokale Zeit, Sie würden, wie die Dinge ausgehen.

Ich habe debugging-meine Werte zu behandeln sind. Hier ist die Ausgabe von einem job, der lief am frühen morgen (vom server aus gesehen):

lastRun:    2013-10-12T00:06:55.088Z (this one is being run at 1 am)
morningRun: 2013-10-11T14:00:00.000Z
eveningRun: 2013-10-12T02:30:00.000Z

Laufen die zahlen so sind, wie ich erwarten würde Sie zu sein. In zwei Stunden möchte ich am Abend E-Mail zu gehen (7:30 Uhr meine Zeit = 2:30 Uhr am folgenden Tag-server-Zeit).

Suchen wieder eine Stunde später sehen wir:

lastRun:    2013-10-12T01:06:58.267Z (this one is at 2 am)
morningRun: 2013-10-12T14:00:00.000Z
eveningRun: 2013-10-13T02:30:00.000Z <---- what?

Plötzlich meine Berechnung für mein Abend hat umgedreht das Datum der Linie, obwohl es noch 10/12 (nicht 10/13 noch). Da dieses mein überprüfen, um zu sehen, ob ich einplanen sollten die E-Mail nicht, da er nun meint, ich brauche die E-Mail senden in 24 Stunden, nicht 30 Minuten.

Gekämpft, mit diesem seltsamen Inkonsistenz für eine Weile, ich dachte, ich hätte herausgefunden, warum es war, es zu tun und meinen Berechnungen mit dem Zeit-zone Zeug oben, aber das hat nicht den trick tun :(. Dies scheint sicher, wie eine Art seltsame Fehler als würde ich erwarten, dass dies geschieht:

//Today is 10/12
var eveningRun = moment().startOf('day'); //10/12/2013 - 00:00:00
eveningRun.hour(19).minute(30); //10/12/2013 - 19:30
eveningRun.add('minutes', diffTZ); //10/13/2013 - 2:30 am

Dies funktioniert bis zu einem bestimmten Punkt entscheidet, dass "heute" ist eigentlich 10/13 und stellt die Abend-Lauf statt 10/14, statt. Hilfe wird sehr geschätzt, oder ob das ein bug ist würde gerne wissen, was ich tun kann, um dieses Problem zu umgehen, bis es gelöst.

Schreibe einen Kommentar