2016-04-04 7 views
0

Ich habe eine API-Endpunkt Daten mich als Array zurückkehrt, wie folgt aus:Wie wird ein Array von Datumskomponenten in ein JavaScript-Datumsobjekt umgewandelt? So

{ 
    date: [ 
    '2016', 
    '4', 
    '2', 
    '10', 
    '3', 
    '23' 
    ] 
} 

Was ist die einfachste/tersest Weg, dies zu einem Date-Objekt zu drehen, so dass ich Objekte sortieren? Der Mangel an führenden Nullen und das Vorhandensein von Minuten & Stunden lässt mich denken, dass es ziemlich schwierig ist?

+0

'new Date (...)' hängen Parameter auf Parameter sortieren –

Antwort

1

Wenn Ihr Array festgelegt ist, können Sie die folgende

var dt={ 
 
    date: [ 
 
    '2016', 
 
    '4', 
 
    '2', 
 
    '10', 
 
    '3', 
 
    '23' 
 
    ] 
 
}; 
 

 
//assuming first component is YYYY, second is MM, third is DD then HH:MM:SS 
 
alert(new Date(dt.date[0]+"-"+((dt.date[1] - 1) < 10 ? "0" + (dt.date[1]-1) : (dt.date[1]-1))+"-"+ (dt.date[2] < 10 ? "0" + dt.date[2] : dt.date[2]) + "T" + (dt.date[3] < 10 ? "0" + dt.date[3] : dt.date[3]) + ":" + (dt.date[4] < 10 ? "0"+dt.date[4] :dt.date[4]) +":" + (dt.date[5] < 10 ? "0"+dt.date[5] :dt.date[5])))

+0

Danke dafür :) –

+2

Warum eine Zeichenfolge erstellen, die dann analysiert werden muss? Übergeben Sie die Teile direkt an den Date-Konstruktor als Werte, nicht als Zeichenfolge. – RobG

+0

@ A1rPun Ich habe meine Antwort seitdem geändert. –

4

Verwendung new Date() mit Korrektur für Monat ein (Null-basiert).

new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]); 
var date = new Date(object.date[0], object.date[1] - 1, object.date[2], object.date[3], object.date[4], object.date[5]); 
2

Sie sind für die einfachste Art und Weise zu fragen. Dann bist du hier.

var obj = { 
 
    date: [ 
 
    '2016', 
 
    '4', 
 
    '2', 
 
    '10', 
 
    '3', 
 
    '23' 
 
    ] 
 
}; 
 
--obj.date[1]; 
 
console.log(new Date(...obj.date));

Vom MDN Artikel von Date, das month Argument ist ein Integer-Wert den Monat darstellt, wobei 0 für den Monat Januar für Dezember bis 11 beginnen. Das bedeutet, dass Sie den tatsächlichen Wert des Monats um 1 reduzieren müssen.

Diese Lösung verwendet auch spread operators.

+0

Wenn Sie etwas sehr knappes wollen, aber in ** all ** Browsern arbeiten, ersetzen Sie die letzte Zeile durch 'new Date (Date.UTC.apply (null, obj.date))' ', aber das behandelt die Werte als UTC. – RobG

1

Erweiterte Lösung für eine Reihe von "dates" Sortierung (nach der Konvertierung) Date.getTime und Array.sort Funktionen:

var dates = [ 
 
    { date: [ '2016','4','2','10','3','23'] }, 
 
    { date: [ '2016','4','1','10','3','23'] }, 
 
    { date: [ '2016','4','3','11','3','23'] } 
 

 
]; 
 

 
dates.sort(function(a,b){ 
 
    // compound date string in form: "2016,4,2 10:3:23" to pass into Date constructor 
 
    var aDate_str = a.date.slice(0,3).join() + " " + a.date.slice(3).join(":"), 
 
     bDate_str = b.date.slice(0,3).join() + " " + b.date.slice(3).join(":"), 
 
     aTime = (new Date(aDate_str)).getTime(), // getting date as the number of milliseconds 
 
     bTime = (new Date(bDate_str)).getTime(); 
 

 
    return (aTime == bTime)? 0 : ((aTime < bTime)? -1 : 1); 
 
}); 
 

 
document.write("<pre>" + JSON.stringify(dates, 0, 4) + "</pre>");

+0

@NinaScholz, achten Sie auf den Satz des Autors, "dies in ein Datumsobjekt umzuwandeln, damit ich Objekte sortieren kann?". Denkst du nicht? – RomanPerekhrest

Verwandte Themen