2017-10-27 1 views
1

Ich habe eine Datum Uhrzeit (Freitag, 27 Oktober 2017 4:00:00 AM) in der US Central Time Zone (CDT). Ich möchte diese Datumszeit in verschiedene Zeitzonen umwandeln. Dies sind Zeitzonen, die ich konvertieren wollte.Konvertieren US Central Time in verschiedene Zeitzonen mit Moment JS

Eastern Time (EDT) 
Pacific Time (PDT) 
New Delhi, India (IST) 
Central Europian Time (CET) 
Riyadh, Saudi Arabia (AST) 
Pakistan Standard Time (PKT) 
Lagos, Nigeria (WAT) 
Australian Standard Time (AET) 
Greenwich Mean Time (GMT) 
Moscow, Russia (MSK) 
China Standard Time (CST) 

Dies ist, wie ich

var dateTime = moment.tz("2017-10-27 4:00:00 AM", "America/Chicago"); 
var IST = dateTime.tz('Asia/Calcutta').format('MMMM Do YYYY, h:mm:ss a'); 
console.log(IST) // October 27th 2017, 9:30:00 am 

Das zurückgegebene Datum Zeit falsch tue. Denn Indische Standardzeit ist 10 Stunden und 30 Minuten vor der Zentralzeit.

Es Freitag sein sollte, 27. Oktober 2017 02.30 (IST)

Dank!

+0

Okay, haben Sie so etwas bisher versucht? Es hört sich so an, als müsste man den Wert in der zentralen Zeit analysieren und dann den 'tz'-Mutator wie in https://momentjs.com/timezone/docs/#/using-timezones/converting-to-zone/ aufrufen. –

+0

var dateTime = moment.tz ("2017-10-27 4:00:00 AM", "Amerika/Chicago"); var IST = dateTime.tz ('Asien/Kalkutta'). Format ('MMMM Do YYYY, h: mm: ss a'); console.log (IST) // 27. Oktober 2017, 9:30:00 Uhr Ist dieser Code korrekt? Es ist eigentlich nicht korrekt. – Mohanraj

+1

Bitte ** bearbeiten Sie Ihre Frage **, um zu zeigen, was Sie versucht haben - und was Sie erwartet haben vs was Sie bekommen haben. –

Antwort

4

Das Problem ist nicht mit der Umstellung auf die indische Zeitzone - es ist das ursprüngliche Parsing der Chicago-Zeit. Diese

:

var dateTime = moment.tz("2017-10-27 4:00:00 AM", "America/Chicago"); 

... wird behandelt, als 04.00 UTC, und dann in Amerika/Chicago, so es endet 23.00 Uhr Ortszeit darstellt (am 26. Oktober) in Chicago. Sie können dies sehen, indem Sie einfach den Wert dateTime protokollieren.

Wenn Sie den Code ändern:

var dateTime = moment.tz("2017-10-27 04:00:00", "America/Chicago"); 

... dann ist es als 04.00 Ortszeit am 27. behandelt, was ist das, was ich glaube, Sie erwartet. Das Ergebnis der Umstellung nach Asien/Kalkutta ist dann wie erwartet 14:30 Uhr.

So ändern Sie entweder das Format Ihrer Eingabe, oder dieses Format angeben. Zum Beispiel funktioniert das auch gut:

var dateTime = moment.tz("2017-10-27 4:00:00 AM", "YYYY-MM-DD h:mm:ss a", "America/Chicago"); 
+0

Ich denke, dass Format-Parameter im letzten Teil der Antwort sein sollte "" JJJJ-MM-TT h: mm: ss A "" und nicht "" JJJJ-MM-TT h: mm: ss a "', Moment hat kein Kleinbuchstabe "yyyy". – VincenzoC

+0

@VincenzoC: Danke, behoben. –

+0

@JonSkeet Großartig! Es funktioniert jetzt gut. Danke vielmals. – Mohanraj

Verwandte Themen