2017-12-13 3 views
1

ich ein Date Zeichenfolge in Millisekunden von Mitternacht zu beginnen wie:konvertieren Millisekunden Datumsformat in Javascript

var date = new Date("2017-12-14").setUTCHours(0,0,0,0) 

Nun ist die date = 1513209600000; d.h., Do 14. Dezember 2017 00:00:00. Dies ist genau, wie ich mein Datum von Mitternacht oder Beginn des Tages, d. H. Mitternacht, beginnen möchte.

Aber wenn ich versuche, diese Zeitstempel wieder in Date-Objekt zu konvertieren, ist es nicht das Stunden-Format beibehalten, wie:

var dateObj = new Date(date); // Thu Dec 14 2017 05:30:00 GMT+0530 (IST) 

Ich mag diese dateObj das Datum und die Zeit haben, Beginn ab Mitternacht. Kann mir bitte jemand vorschlagen was genau ich hier falsch mache? Danke im Voraus.

+1

Sie Probleme mit Zeitzonen mit: Beachten Sie, wie es ist 05.30 Uhr GMT + 5: 30 ... – olivarra1

+1

'setUTCHours' kehrt * Die Anzahl der Millisekunden zwischen dem 1. Januar 1970 00:00:00 UTC und dem aktualisierten Datum. * Ihr Millisekundenwert ist bereits um 5:30 Stunden nach der Zeitzone Ihres Systems versetzt. – gurvinder372

+0

@ gurvinder372- "* Ihr Millisekunden-Wert ist bereits verrechnet ... *" Nein ist es nicht, der Zeitwert ist immer UTC, also ist es nicht versetzt.Es ist der lokale Wert, der von * toString * zurückgegeben wird (basierend auf der Host-Zeitzone). – RobG

Antwort

3

Das Datumsobjekt behält seinen Wert, was Sie sehen, ist die Darstellung Ihres Browsers in der lokalen Zeitzone. Versuchen Sie dateObj.toUTCString(), um den ursprünglichen Wert zu lesen.

0

denke ich Gebrauch sollte

var date = new Date("2017-12-14").setHours(0,0,0,0) 
0

Per EMCA-262, ein Datum Zeichenfolge im ISO 8601-Format wie "2017.12.14" von der Parser in integrierten als UTC wird analysiert setUTCHours zu setHours ändern (im Gegensatz zu ISO 8601) und die Zeit wird auf 00:00:00 UTC eingestellt, so dass die Stunden nicht auf Null gesetzt werden müssen.

Also:

var date = new Date("2017-12-14").setUTCHours(0,0,0,0) 

den setUTCHours Anruf ist überflüssig.

Da Sie +05: 30 sind, ist das UTC-Datum für den Zeitraum von Mitternacht bis 05:30 Uhr der Vortag.

Wenn Sie mit der Zeit auf 00:00:00 gesetzt „2017.12.14“ als lokales Datum zu analysieren, dann können Sie entweder:

  1. die Zeichenfolge selbst analysieren und setzen Sie ihn auf lokale Mitternacht auf das richtige Datum
  2. die Zeichenfolge als UTC Parse und für den Host-Zeitzone einstellen Offset

für den Fall 1:

function parseISOLocal(s) { 
 
    var b = s.split(/\D/); 
 
    return new Date(b[0], --b[1], b[2]); 
 
} 
 
    
 
var s = "2017-12-14"; 
 
    
 
console.log(parseISOLocal(s).toString()); 
 

Für Fall 2:

var s = "2017-12-14"; 
 
// Parsed as UTC 
 
var d = new Date(s); 
 
// Adjust for host timezone 
 
d.setUTCMinutes(d.getUTCMinutes() + d.getTimezoneOffset()); 
 
// Show local date 
 
console.log(d.toString());

Verwandte Themen