2017-04-07 5 views
0

Ich verwende derzeit FullCalendar und muss die aktuelle Uhrzeit zu einem mehrdeutigen Datum Moment in der Callback-Funktion auswählen.Hinzufügen der aktuellen Zeit zu mehrdeutigem Datum mit momentjs

Bei Auswahl eines Tages in der Monatsansicht geben die Callback-Funktionsparameter "start" und "end" ein mehrdeutiges Datum (keine Zeit) zurück. Ich verwende den folgenden die aktuelle Uhrzeit mit dem Datum hinzuzufügen dann zu einem Moment zurück zu konvertieren, aber frage mich, ob dies der richtige Weg ist, es zu tun ...

if(!start.hasTime()){ 
    start = moment(start.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss'))); 
     end = moment( end.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss'))); 
} 

Wie Sie sehen, ich bin Konvertieren der "Start" - und "End" -Daten und der aktuellen Zeitpunkte in Zeichenfolgen und anschließendes Konvertieren der verketteten Zeichenfolge in einen Moment.

Ich möchte sicherstellen, dass der Moment, den ich erstelle, im gültigen ISO 8601-Format ist.

Danke, Jede Hilfe wäre willkommen.

Antwort

1

In der official docs sagt, wenn Sie format() Funktion aufrufen Sie erhalten das Datum in ISO 8601-Format. check this out: jsfiddle

Außerdem, wenn Sie nicht wollen, die Zeitzonen umgehen, können Sie die Verwendung utc()method

0

ich hatte das gleiche Problem, seltsam, wenn ich v3.40 fullcalendar aufgewertet. Gemäß fullcalendar docs, wurden die Funktionen format() und toISOString innerhalb des Vollkalenders für mehrdeutige Zeitpunkte übersprungen, um nur das Datum zurückzugeben, d. H. "2017-03-06". Um dies zu überwinden und eine Zeit festzulegen, müssen Sie ein neues Momentobjekt erstellen, was Sie getan haben. Um jedoch ein konsistentes Parsen zwischen Browsern sicherzustellen, sollten Sie das von Ihnen analysierte Format wie von moment docs empfohlen angeben. Also für Ihr Szenario, wird es sein:

if(!start.hasTime()){ 
     var format = 'YYYY-MM-DD HH:mm:ss'; 
     start = moment(start.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss')), format); 
     end = moment( end.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss')), format); 
    } 

Um den Code sauberer zu machen und obwohl leicht lesbar, könnten Sie einen neuen Moment mit dem Unix-Zeitstempel erzeugen (was eine Zahl ist, und verlässt sich nicht auf String-Formate) der start Moment und stellen Sie die Zeit mit dem Moment set Funktion. So könnte es nun wie folgt aussehen:

if(!start.hasTime()){ 
     var timestamp = start.valueOf(); 
     var now = moment(); 
     var startMomentWithNowTime = moment(timestamp).set({ 
      'hour': now.hour(), 
      'minute': now.minute(), 
      'second': now.second() 
     }); 
     start = startMomentWithNowTime; 
     end = startMomentWithNowTime; 
    } 

Excuse die beschreibende Variable Benennung startMomentWithNowTime. Ein paar Zeilen mehr, aber hoffentlich leichter zu lesen. Sie können diese Logik auch in eine Funktion einfügen, die bei Bedarf verwendet wird. Ich hoffe es hilft!

Verwandte Themen