2012-08-07 12 views
13

Mam kilka obiektów, z których każdy ma znacznik czasu, który chcę grupować według daty, do obiektu JSON. Ostatecznym celem jest coś takiego:JavaScript Date - ustawić tylko datę, ignorując czas?

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

Aby uzyskać informacje o dacie, jestem testowanie każdego datownika obiekt i przy użyciu:

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

..then Używam że przechowywać jako nazwa obiektu JSON. Wydaje się nieporządny i jestem pewien, że powinien istnieć łatwiejszy sposób robienia rzeczy.

Porady/sugestie z zadowoleniem!

+0

Nie mogę sobie wyobrazić "nowej daty" (parseInt ("07/06/2012 13:30", 10)); "zadziała. Czy może czegoś brakuje? – KooiInc

+0

Tak, masz rację - przykro mi, to jest wklejone z mojego istniejącego kodu i nie czytałem korekty! Obecny kod przechowuje znacznik czasu jako format "milisekund z epoki", więc ma on więcej sensu w oryginalnym kontekście ... – Paul

+0

Ok, rozumiem. – KooiInc

Odpowiedz

23

Co powiecie na ?

Alternatywnie, użyj .getDate(), .getMonth() i .getYear()?

Moim zdaniem, jeśli chcesz grupować rzeczy według daty, po prostu chcesz uzyskać dostęp do daty, a nie ją ustawić. Poprzez pewien ustalony sposób dostępu do pola daty, możesz je porównać i pogrupować razem, nie?

Sprawdź wszystkie sposoby zabawy Data tutaj: MDN Docs


EDIT:

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

konstruktor data jest: Jeśli chcą aby utrzymać go jako obiekt daty, po prostu to zrobić całkiem sprytnie o parsowaniu Stringsów (choć nie bez wielu zastrzeżeń, ale to powinno działać dość konsekwentnie), więc wzięcie starej daty i wydrukowanie jej tylko do daty bez żadnego czasu spowoduje taki sam efekt, jaki miałeś w ori ginal post.

+0

To prawdopodobnie rozsądniejszy sposób na zrobienie tego, myślałem o pozostawieniu go jako obiektu Date, chociaż tak czy inaczej jest przechowywany jako tekst w JSON! Pierwotny powód, dla którego nie używano '.toDateString()', nie był pewien, czy w polu są spacje. Nie myśl, że to ważne, naprawdę: – Paul

+1

Uwaga: przewiń w dół, aby znaleźć pełną listę metod. Tak wiele wariantów toString, twoja głowa pop. –

+0

ooh '.valueOf()' - to również przydatne! Dzięki! – Paul

7

Jeśli nie przeszkadza tworzeniu datę dodatkowy przedmiot, można spróbować:

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

zrobić coś bardzo podobnego, aby uzyskać datę bieżącego miesiąca bez czasu.

+3

Myślę, że powinno to być getUTCDate. getUTCDay zwraca dzień tygodnia (0,6). getUTCDate zwraca dzień miesiąca (1,31) –