2016-05-05 4 views
1

ich ein moment.js Objekt aus fullcalendar in BST erzeugt haben, die wie folgt aussieht:Moment bisher Objekt Zeitzone Ausgabe

console.log(momentSelected) 
//Moment {_isAMomentObject: true, _isUTC: true, _offset: 0, _locale: f, _d: Tue May 03 2016 01:00:00 GMT+0100 (BST)…} 

Ich will nicht ein BST Zeit, sondern eine UTC-Zeit, die wie folgt aussieht:

console.log(momentSelected.format('YYYY-MM-DD HH:mm Z')); 
//2016-05-03 00:00 +00:00 

Jetzt muss ich es in ein Date-Objekt konvertieren:

$scope.date = new Date(momentSelected.format('YYYY-MM-DD HH:mm Z')); 
console.log($scope.date); 
//Wed May 04 2016 01:00:00 GMT+0100 (BST) 

Die letzte Ausgabe falsch ist ... ich möchte Wed May 04 2016 00:00:00+00:00 (UTC)

+0

Aber es zeigt, dass '_isUTC: True, _offset: 0' ist bereits in UTC. Vielleicht müssen Sie [Date.prototype.toUTCString()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString) verwenden. –

+0

ja ich stimme zu, warum tut Es erzeugt ein Date-Objekt in BST ... – Mika

+0

@ Matts Antwort erklärt es (_Wenn Ihre lokale Zeitzone UK ist (alternierend zwischen GMT und BST für Sommerzeit), dann ist es unmöglich, in der erzeugten Zeichenfolge (UTC) Zeit zu bekommen von console.log ($ scope.date); unabhängig davon, wie Sie dieses Datum erstellt haben. –

Antwort

3

Sie können ein Objekt Date mit der Funktion toDate für das Objekt Moment erstellen.

$scope.date = momentSelected.toDate(); 

Sie müssen jedoch erkennen, dass die Natur des Date Objekt ist, dass es immer UTC vertreten intern und seine toString Funktion immer reflektieren die lokale Zeitzone, wo der Code ausgeführt wird.

Wenn Ihre lokale Zeitzone GB ist (alternierend zwischen GMT und BST für Sommerzeit), ist es unmöglich (UTC) Zeit in der von console.log($scope.date); erzeugten Zeichenfolge zu erhalten, unabhängig davon, wie Sie dieses Datum erstellt haben.

Aus diesem Grund ist es besser, die format Funktion des Moments zu verwenden und diese Zeichenfolge direkt anzuzeigen. A moment kann UTC, lokale Zeit und andere Zeitzonen wiedergeben. Ein Date Objekt kann nicht.

Außerdem sollten Sie die Unterstrich-Präfix internen Felder eines moment Objekts nicht beachten. Verwenden Sie stattdessen die öffentliche API. Siehe die moment user guide.

+0

Endlich bekomme ich es! Wie greife ich auf die intern gespeicherte UTC-Zeit zu? Grundsätzlich verwendet jedes Datum, das ich habe, Moment und ist in UTC, aber für dieses eine Ding, das ich verwenden muss, brauche ich ein Datumsobjekt. Also $ scope.date ist das Datumsobjekt, das ich jetzt konvertieren muss, ist zurück in Moment, aber der Moment ist um eine Stunde weg. Also brauche ich das Gegenteil von der toDate() Methode. – Mika

+0

Ich glaube, Sie suchen nach den Funktionen '.utc()' und '.local()'. Sie können dann 'format' verwenden, um Ihren String zu erzeugen, wie Sie möchten. Wenn Sie moment.js verwenden, sollten Sie das Objekt "Date" nicht verwenden, es sei denn, Sie benötigen es wirklich, z. B. für die Interaktion mit anderen Komponenten, die eine solche benötigen. –

+0

Erzähl mir davon ... Der Typ, der dieses Objekt erstellt hat, sollte aufgereiht werden! – Mika