2016-10-03 4 views
0

Ich nehme eine Zeitzone (req.body.TIMEZONE) und ein Datetime Start - Ende von einem Formular. Ich versuche, die Zeit zurück zu zeigen und eine Ical-Datei damit zu machen, aber wann immer ich neues Datum (String) bekomme, bekomme ich die Zeit 7 Stunden voraus? Ich versuche, Moment zu verwenden? Wie kann ich dem Benutzer die lokale Zeit in der ical Datei anzeigen?Datetime Parsing für Ical Dateien

 var cal = ical(); 
      cal.domain('gmail.com'); 


      var dateFormat = 'YYYY-DD-MM HH:mm+00:00'; 
      console.log(req.body.START_TIME); //2016-10-03 10:40 am 

      var startTime = moment(req.body.START_TIME); 
      var localDateStart = startTime.local(); 
      console.log(localDateStart.format(dateFormat)); // 2016-03-10 10:40+00:00 
      console.log(new Date(localDateStart.format(dateFormat))); // invalid... wants the same time 


      var endTime = moment(req.body.END_TIME); 
      var localDateEnd = endTime.local(); 
      console.log(localDateEnd.format(dateFormat)); 

      var event = cal.createEvent({ 

       start: new Date(localDateStart.format(dateFormat)), 
       end: new Date(localDateEnd.format(dateFormat)), 
       summary: req.body.TITLE, 
       location: req.body.LOCATION, 
       description: req.body.DESCRIPTION, 
       organizer: req.body.HOSTED + " <" + req.body.EMAIL + ">", 
       url: req.body.URL 
      }); 
+0

Da das Format angezeigt, das Ergebnis 'new Date (req.body.START_TIME)' Implementierung abhängig ist. Warum verwenden Sie eine Bibliothek, um die Zeichenfolge manchmal zu analysieren, andere nicht? – RobG

+0

@RobG Ich verwende immer Moment, da ich es analysiere und die gleiche Variable neu zuordene. Aber die Echtzeit kommt zurück, aber wenn ich es zeige, wird es in GMT angezeigt, wo ich PST möchte. –

+0

Sie sind nicht "immer mit Moment", z. in 'new Date (localDateStart.format (dateFormat))' und unter der Annahme * localDateStart * ist ein Moment-Objekt, Sie verwenden Moment, um eine Zeichenkette zu generieren, und lassen sie dann * Date * analysieren, was eine sehr schlechte Idee ist. Verwenden Sie stattdessen 'localDateStart.clone()', siehe [* moment clone *] (http://momentjs.com/docs/#/parsing/moment-clone/). – RobG

Antwort

0

Sie müssen nur get the JavaScript Date instance für Start-und Endzeiten. Sobald Sie das haben, werden Zeitzonen-Offsets von dort angewendet. Das Datum kann aus einer Kettenverkettung instanziert werden.

This guys says:

In der Regel: IMMER speichern und zu verarbeiten Daten als UTC-Zeit, bis Sie sie an die Benutzer gehen anzuzeigen. Wenn Sie lokale Zeiten von dem Benutzer lesen, müssen Sie sie in UTC-Zeit frühestens möglichen Moment konvertieren und sie so lange beibehalten, bis Sie sie wieder anzeigen.

Here's an online timestamper I created das könnte Licht werfen.

enter image description here