2012-08-07 10 views
13

Ich habe eine Reihe von Objekten, von denen jede einen Zeitstempel hat, die ich nach Datum gruppieren möchte, in ein JSON-Objekt. Das ultimative Ziel ist so etwas wie diese:Javascript Date - nur das Datum einstellen, Zeit ignorieren?

myObject = { 
    "06/07/2012" : [ 
     { 
      "timestamp" : "07/06/2012 13:30", 
      ... 
     }, 
     { 
      "timestamp" : "07/06/2012 14:00", 
      ... 
     } 
    ], 
    "07/07/2012 [...] 
} 

das Datum zu erhalten, teste ich jedes Zeitstempel Objekt und Verwendung:

var visitDate = new Date(parseInt(item.timestamp, 10)); 
visitDate.setHours(0); 
visitDate.setMinutes(0); 
visitDate.setSeconds(0); 

..then Ich bin mit, dass als speichern ein Name für das JSON-Objekt. Es scheint chaotisch zu sein, und ich bin mir sicher, dass es einen einfacheren Weg geben sollte.

Beratung/Vorschläge willkommen!

+0

Ich kann mir nicht vorstellen 'neues Datum (parseInt (" 07/06/2012 13:30 ", 10));' würde funktionieren. Oder fehlt mir etwas? – KooiInc

+0

Yeah, du hast Recht - Entschuldigung, das ist aus meinem bestehenden Code eingefügt und nicht Korrekturlesen! Der aktuelle Code speichert den Zeitstempel als das Format "Millisekunden aus der Epoche", so dass es im ursprünglichen Kontext mehr Sinn macht ... – Paul

+0

Ok, ich verstehe. – KooiInc

Antwort

23

Wie wäre es mit .toDateString()? Verwenden Sie alternativ .getDate(), .getMonth() und .getYear()?

In meiner Meinung, wenn Sie Dinge nach Datum gruppieren möchten, möchten Sie nur auf das Datum zugreifen, nicht festlegen. Durch einen bestimmten Zugang zum Datumsfeld können Sie sie vergleichen und gruppieren, nein?

Schauen Sie sich alle Spaß Datum Methoden hier: MDN Docs


Edit: Wenn Sie wollen es als Date-Objekt zu halten, tun gerade dies:

var newDate = new Date(oldDate.toDateString()); 

Datum Konstruktor ist ziemlich schlau beim Analysieren von Strings (obwohl nicht ohne eine Unmenge von Vorbehalten, aber das sollte ziemlich konsistent funktionieren), also wird das alte Datum und das Drucken auf das Datum ohne Zeit zu dem gleichen Effekt führen, den Sie in den Ori hatten Kinnpfosten.

+0

Das ist wahrscheinlich eine vernünftige Art, es zu tun, ich dachte daran, es als Date-Objekt zu lassen, obwohl es sowieso als Text in JSON gespeichert ist, denke ich! Der ursprüngliche Grund, '.toDateString()' nicht zu verwenden, war unsicher, ob Leerzeichen im Feld vorhanden sein sollten. Angenommen, das ist wirklich wichtig – Paul

+1

Hinweis: Scrollen Sie nach unten, um die * vollständige * Liste der Methoden zu finden. So viele Varianten von toString, wird dein Kopf knallen. –

+0

ooh '.valueOf()' - das ist auch nützlich! Vielen Dank! – Paul

7

Wenn Sie nichts dagegen haben ein zusätzliches Datum Objekt erstellen, könnten Sie versuchen:

var tempDate = new Date(parseInt(item.timestamp, 10)); 
var visitDate = new Date (tempDate.getUTCFullYear(), tempDate.getUTCMonth(), tempDate.getUTCDate()); 

ich etwas sehr ähnliches tun, ohne die Zeit ein Datum des aktuellen Monats zu erhalten.

+3

Ich denke, es sollte getUTCDate sein. getUTCDay gibt den Wochentag zurück (0,6). getUTCDate gibt den Tag des Monats zurück (1,31) –