2016-10-12 9 views
0

Ich habe ein Datum im UTC-Format.UTC-Datum in lokale Zeitzone umwandeln

Ich habe eine Funktion zum Konvertieren von UTC-Datum in meine lokale Zeit.

function FormatDate(date) 
{ 
    var arr = date.split(/[- :T]/), // from your example var date = "2012-11-14T06:57:36+0000"; 
    date = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], 00); 

    var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000); 

    var offset = date.getTimezoneOffset()/60; 

    var hours = date.getHours(); 

    newDate.setHours(hours - offset); 

    return newDate; 
} 

Meine lokale Zeitzone ist GMT +0530.

Mein Code erzeugt diese Ausgabe:

Tue Oct 11 2016 10:33:00 GMT+0530 (IST) 

ich das Datum mit einem Online-Tool konvertiert das richtige Datum und Zeit zu bekommen.

Wednesday, October 12, 2016 10:30 AM 

Mein Code entspricht dem Online-Tool pünktlich, aber nicht am Datum.

Wie kann ich die Ausgabe meines Codes korrigieren, vorzugsweise mit moment.js?

Antwort

0

Da Sie moment markiert haben, ich nehme an, Sie Moment verwenden.

In solchen Fällen sollten Sie Ihren Ansatz konsistent halten und nicht Moment und Datum Objekt mischen.

var dateStr = '2016-10-12 05:03:51'; 
 
var timeZone = "+0530"; 
 
var date = moment.utc(dateStr).utcOffset(dateStr + timeZone) 
 
console.log(date.toString())

+0

Gibt einen Fehler für mich zurück. Außerdem sollten Sie dem Parser immer das Format mitteilen, das Sie ihm geben, sonst verlassen Sie sich darauf, dass er richtig rät. – RobG

1

UTC ist ein Standard, kein Format. Ich nehme an, Sie meinen, Ihre Strings verwenden eine Nullpunktverschiebung, dh "2016-10-12 05:03:51" ist "2016-10-12 05: 03: 51 + 0000"

Sie sind auf dem richtigen Weg, wenn Parsen der Zeichenfolge, aber Sie können UTC-Methoden verwenden, um den Host daran zu hindern, die Werte für den Systemoffset beim Erstellen des Datums anzupassen.

function parseDateUTC(s){ 
 
    var arr = s.split(/\D/); 
 
    return new Date(Date.UTC(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5])); 
 
} 
 

 
console.log(parseDateUTC('2016-10-12 05:03:51').toLocaleString());

Wenn Sie moment.js verwenden, können Sie so etwas wie die folgenden Aktionen aus. Es zwingt Moment UTC zu verwenden, wenn die Zeichenfolge Parsen, dann lokale es zur Ausgabe zu schreiben:

var d = moment.utc('2016-10-12 05:03:51','YYYY-MM-DD HH:mm:ss'); 
 
console.log(d.local().format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.0/moment.js"></script>

+0

Dank RobG Dies funktioniert für mich! –

+0

Vielen Dank, du hast meinen Tag gerettet! – bravohex

Verwandte Themen