En mi aplicación node.js tengo la siguiente matriz de objetos, que incluye un campo de fecha llamado REPORTEDDATE:

[ { INCIDENTNUMBER: 'INC000000000002',
    SUBMITTER: 'Chris',
    REPORTEDDATE: Mon May 09 2016 18:17:04 GMT+0000 (UTC),
    LASTRESOLVEDDATE: Mon May 09 2016 18:17:04 GMT+0000 (UTC),
    OWNERGROUP: 'ACME Help Desk',
    COMPANY: 'ACME Inc',
    CATEGORIZATIONTIER1: 'cat-1',
    CATEGORIZATIONTIER2: 'cat-2',
    CATEGORIZATIONTIER3: 'cat-3',
    RESOLUTIONCATEGORY: 'res-cat',
    RESOLUTIONCATEGORYTIER2: 'res-cat-2',
    RESOLUTIONCATEGORYTIER3: 'res-cat-3',
    REPORTEDSOURCE: 'Phone',
    DESCRIPTION: 'Some description',
    ID: 9 },
  { INCIDENTNUMBER: 'INC000000000002',
    SUBMITTER: 'Chris',
    REPORTEDDATE: Mon May 09 2016 18:17:09 GMT+0000 (UTC),
    LASTRESOLVEDDATE: Mon May 09 2016 18:17:09 GMT+0000 (UTC),
    OWNERGROUP: 'ACME Help Desk',
    COMPANY: 'ACME Inc',
    CATEGORIZATIONTIER1: 'cat-1',
    CATEGORIZATIONTIER2: 'cat-2',
    CATEGORIZATIONTIER3: 'cat-3',
    RESOLUTIONCATEGORY: 'res-cat',
    RESOLUTIONCATEGORYTIER2: 'res-cat-2',
    RESOLUTIONCATEGORYTIER3: 'res-cat-3',
    REPORTEDSOURCE: 'Phone',
    DESCRIPTION: 'Some description',
    ID: 10 } ]

¿Hay alguna manera de determinar la fecha máxima en los campos REPORTEDDATE de estos objetos? Lo sé, la mejor manera de preguntar sería describir lo que he intentado, pero, con este formato, realmente no sé por dónde empezar ...

0
Eugene Goldberg 10 may. 2016 a las 02:28

3 respuestas

La mejor respuesta

Puede hacerlo simplemente con {{X0} }, reduce, Math.max y Date.parse().

var maxDate = new Date(arr.map(o => Date.parse(o.REPORTEDDATE))
                          .reduce((a, b) => Math.max(a, b)))
                          .toUTCString();

Trabajando JSFiddle

3
4castle 10 may. 2016 a las 00:14

Suponiendo que REPORTEDDATE es una instancia real de Date y no una cadena, utilice una operación reduce

let maxDate = new Date(arrayOfObjects.reduce(
    (currentMaxDate, obj) => Math.max(currentMaxDate, obj.REPORTEDDATE), 0));

Tenga en cuenta que Math.max() trata las fechas como números a través de Date.prototype.valueOf() que devuelve la marca de tiempo de la fecha. Esta es la razón por la cual la salida de la operación de reducción está envuelta en new Date().

0
Phil 9 may. 2016 a las 23:45

Es posible que pueda usar la clase Fecha para analizar las fechas de las cadenas en algo que se pueda comparar en un bucle para encontrar el máximo, como por ejemplo:

var timestamp = new Date(array[0].REPORTEDDATE).getTime();

Dependiendo de la implementación de la clase Fecha en su sistema, puede encontrar que necesita jugar con una cadena para analizarla correctamente o, si no lo hace, puede que necesite usar una biblioteca externa o escribir código para obtener la fecha, meses, minutos, horas, segundos, etc. y construye un objeto Date a partir de esos.

0
Scottie 9 may. 2016 a las 23:43