2017-06-21 6 views
0

Ich habe es schwer, eine UTC-Datumszeichenkette mit einem Offset zu nehmen und die Zeit exakt an die lokale Zeit des Benutzers anzupassen. Ich erhalte ein Datum auf unserem Server sagen: 2017-06-21T20:26:28.744Z und ich muss es in einen Zeitstempel der Ortszeit des Senders verwandeln. Für dieses Beispiel nehmen wir an, dass der Offset 6 Stunden beträgt.Formatieren eines Datums auf die Ortszeit des Absenders

Ich weiß, dass dies wahrscheinlich falsch ist und dass der z-Teil erklärt, was der Offset wirklich ist.

Ich muss 2017-06-21T20:26:28.744Z in 2017-06-21T14:26:28 mit Moment drehen.

Doing dies scheint mir den UTC-Teil der Zeichenfolge und Chops aus dem Offset geben. Ich brauche den Offset verwenden, um die Stunden/Minuten zurück

moment 
    .utc('2017-06-21T20:26:28.744Z') 
    .local() 
    .format('YYYY-MM-DDTHH:mm:ss') 
    // 2017-06-21T20:26:28" 
    // I need 2017-06-21T14:26:28 
+0

'moment.utc ('2017-06-21T20: 26: 28.744Z'). Local(). Format ('JJJJ-MM-TTTHH: mm: ss')'? –

+0

Versucht das zu. Ich werde tatsächlich aktualisieren, um es so in dem Beispiel zu zeigen –

+0

Ihr Code scheint gut, es druckt '2017-06-21T22: 26: 28' in meiner Umgebung (' Europa/Rom' Zeitzone 'UTC + 2') das ist die richtige Ausgabe. – VincenzoC

Antwort

0

Sie utcOffset

die durch Zuführen Minuten Offset UTC einstellen können einzustellen. Beachten Sie, dass, sobald Sie einen Offset festgelegt haben, dieser fest ist und sich nicht von selbst ändert (d. H. Es gibt keine Regeln für die Sommerzeit). Wenn Sie eine tatsächliche Zeitzone - Zeit an einem bestimmten Ort wünschen, wie America/Los_Angeles, betrachten Sie moment-timezone.

Wenn der Eingang weniger als 16 und größer als -16 ist, interpretiert er Ihre Eingabe stattdessen als Stunden.

hier ein funktionstüchtiges Beispiel:

console.log(moment 
 
    .utc('2017-06-21T20:26:28.744Z') 
 
    .utcOffset(-6) 
 
    .format('YYYY-MM-DDTHH:mm:ss'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

Wenn Sie Zeit-Zeitzone verwenden möchten, können Sie tz() Methode verwenden:

console.log(moment 
 
    .utc('2017-06-21T20:26:28.744Z') 
 
    .tz('America/Chicago') 
 
    .format('YYYY-MM-DDTHH:mm:ss'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data-2012-2022.min.js"></script>

+0

Das ist näher an dem, was ich will, aber ich will den Offset oder die Zeitzone nicht fest codieren. Server läuft in AWS und könnte überall sein. Soweit ich weiß, ist das Ende eines Zeitstempels der Offset. Ich muss nur lernen, wie man diese Daten extrahiert, und dann könnte ich das verwenden, um die Zeit rückwärts/vorwärts zu verschieben. –

+0

Der Offset ist normalerweise ein Wert, der den Unterschied mit UTC angibt (zB '+02: 00',' -06: 00) ', ...). Ihre Eingabe endet mit 'Z', was bedeutet, dass Ihr Wert UTC ist (' +00: 00' offset). Es ist mir nicht klar, welche Kriterien Sie verwenden möchten, um die Zeit rückwärts/vorwärts zu bewegen. – VincenzoC

+0

Ich hatte ein schreckliches Verständnis von Daten, als ich das tat. Ich wusste nicht, dass die Zahl vor dem z Millisekunden war.Ich weiß, ich dachte, es wäre eine Berechnung meines Offset von Utc. Ich konnte das schaffen. Danke für die Zeit Jungs! Für die Aufzeichnung ist Ihre Antwort nicht falsch und ich würde sie aufwerten, aber ich möchte es nicht so aussehen lassen, als ob mein Verständnis überhaupt korrekt wäre. –

Verwandte Themen