Tengo una serie de fechas utc como:
[ {createdAt: '2022-01-19T22:15:33.008Z'}, {createdAt: '2022-01-19T21:15:33.008Z'}, {createdAt: '2022-01-19T10:15:33.008Z'}, {createdAt: '2022-01-20T23:15:33.008Z'}, {createdAt: '2022-01-21T23:15:33.008Z'}, {createdAt: '2022-01-22T23:15:33.008Z'}, {createdAt: '2022-01-18T23:15:33.008Z'}, ]
Mi resultado deseado es:
{ "2022-01-19":[ {createdAt: '2022-01-19T22:15:33.008Z'}, {createdAt: '2022-01-19T21:15:33.008Z'}, {createdAt: '2022-01-19T10:15:33.008Z'} ], "2022-01-20":[ {createdAt: '2022-01-20T23:15:33.008Z'}, ], "2022-01-21":[ {createdAt: '2022-01-21T23:15:33.008Z'}, ], "2022-01-22":[ {createdAt: '2022-01-22T23:15:33.008Z'}, ], "2022-01-18":[ {createdAt: '2022-01-18T23:15:33.008Z'}, ], }
No sé si hay alguna función de administración de fechas para obtener el AAAA-MM-DD de una marca de tiempo. ¿Cómo puedo hacerlo?
let tab = [ {createdAt: '2022-01-19T22:15:33.008Z'}, {createdAt: '2022-01-19T21:15:33.008Z'}, {createdAt: '2022-01-19T10:15:33.008Z'}, {createdAt: '2022-01-20T23:15:33.008Z'}, {createdAt: '2022-01-21T23:15:33.008Z'}, {createdAt: '2022-01-22T23:15:33.008Z'}, {createdAt: '2022-01-18T23:15:33.008Z'}, ] let output = {}; tab.forEach(element => { let date = element.createdAt.split('T')[0]; if (output[date] == undefined) { output[date] = [] } output[date].push(element) }); console.log(output)
Puede dividir la cadena por el carácter 'T' y luego obtener el primer elemento de la matriz para convertir la cadena al formato correcto.
Luego, puede usar Array.reduce
para construir el objeto:
let arr = [ {createdAt: '2022-01-19T22:15:33.008Z'}, {createdAt: '2022-01-19T21:15:33.008Z'}, {createdAt: '2022-01-19T10:15:33.008Z'}, {createdAt: '2022-01-20T23:15:33.008Z'}, {createdAt: '2022-01-21T23:15:33.008Z'}, {createdAt: '2022-01-22T23:15:33.008Z'}, {createdAt: '2022-01-18T23:15:33.008Z'}, ] const res = arr.reduce((a,b) => { let date = b.createdAt.split("T")[0]; if(!a[date]){ a[date] = []; } a[date].push(b); return a; }, {}) console.log(res)
.as-console-wrapper { max-height: 100%!important; top: 0 }