2012-08-07 27 views
13

Tengo un montón de objetos, cada uno de los cuales tiene una marca de tiempo, que quiero agrupar por fecha, en un objeto JSON. El objetivo final es algo como esto:Fecha de Javascript: ¿configura solo la fecha, ignorando el tiempo?

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

para obtener la fecha, estoy probando cada marca de tiempo objeto y usando:

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

..then estoy usando eso para almacenar la mayor un nombre para el objeto JSON. Parece desordenado, y estoy seguro de que debería haber una manera más fácil de hacer las cosas.

Consejos/sugerencias bienvenidos !!

+0

No me puedo imaginar 'nueva fecha (parseInt (" 07/06/2012 13:30 ", 10));' funcionaría. ¿O me estoy perdiendo algo? – KooiInc

+0

Sí, tienes razón, disculpa, ¡esto está pegado en algunos de mis códigos existentes y no está revisado! El código actual almacena la marca de tiempo como el formato 'milisegundos de época', por lo que tiene más sentido en su contexto original ... – Paul

+0

Ok, lo entiendo. – KooiInc

Respuesta

23

¿Qué tal .toDateString()?

Como alternativa, use .getDate(), .getMonth(), y .getYear()?

En mi opinión, si desea agrupar elementos por fecha, simplemente desea acceder a la fecha, no configurarla. Si tiene alguna forma establecida de acceder al campo de fecha, puede compararlos y agruparlos, ¿no?

Echa un vistazo a todos los aquí métodos diversión Fecha: MDN Docs


Editar: Si desea para mantenerlo como un objeto de fecha, simplemente hacer esto:

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

el constructor de la fecha es bastante inteligente sobre el análisis de cadenas (aunque no sin muchas advertencias, pero esto debería funcionar de manera bastante consistente), por lo que tomar la fecha anterior e imprimirla solo en la fecha sin tiempo dará como resultado el mismo efecto que tenía en el ori publicación final

+0

Esa es probablemente una forma más sensata de hacerlo, estaba pensando en dejarlo como un objeto Date, aunque se almacena como texto en JSON de todos modos, supongo. La razón original para no usar '.toDateString()' no estaba seguro de tener espacios en el campo. No obstante, suponga que realmente importa – Paul

+1

Nota: desplácese un poco hacia abajo para encontrar la * completa * lista de métodos. Tantas variantes de toString, tu cabeza explotará. –

+0

ooh '.valueOf()' - ¡eso también es útil! ¡Gracias! – Paul

7

Si no te importa la creación de un objeto de fecha adicional, usted podría intentar:

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

hago algo muy similar a obtener una fecha del mes en curso sin el tiempo.

+3

Creo que debería ser getUTCDate. getUTCDay devuelve el día de la semana (0,6). getUTCDate devuelve el día del mes (1,31) –

Cuestiones relacionadas