javascript - yyyy - Min/Max de dates dans un tableau?



tolocaledatestring (7)

Comment puis-je connaître la date min et la date maximale d'un tableau de dates? Actuellement, je crée un tableau comme celui-ci:

var dates = [];
dates.push(new Date("2011/06/25"))
dates.push(new Date("2011/06/26"))
dates.push(new Date("2011/06/27"))
dates.push(new Date("2011/06/28"))

Y a-t-il une fonction intégrée pour le faire ou dois-je écrire le mien?

https://code.i-harness.com


** Utiliser des opérateurs d'épandage | ES6 **

let datesVar = [ 2017-10-26T03:37:10.876Z,
  2017-10-27T03:37:10.876Z,
  2017-10-23T03:37:10.876Z,
  2015-10-23T03:37:10.876Z ]

Math.min(...datesVar);

Cela donnera la date minimum du tableau.

Son raccourci Math.min.apply (null, ArrayOfdates);


C'est un moyen particulièrement Math.max.apply(Math,array.map(function(o){return oy;})) de le faire (vous pouvez obtenir le maximum d'un tableau d'objets en utilisant l'une des propriétés de l'objet): Math.max.apply(Math,array.map(function(o){return oy;}))

Voici la réponse acceptée pour cette page: Trouver la valeur maximale d'un attribut dans un tableau d'objets


Le code est testé avec IE, FF, Chrome et fonctionne correctement:

var dates=[];
dates.push(new Date("2011/06/25"))
dates.push(new Date("2011/06/26"))
dates.push(new Date("2011/06/27"))
dates.push(new Date("2011/06/28"))
var maxDate=new Date(Math.max.apply(null,dates));
var minDate=new Date(Math.min.apply(null,dates));

Les réponses ci-dessus ne gèrent pas les valeurs vierges / indéfinies pour résoudre ce problème. J'ai utilisé le code ci-dessous et remplacé les blancs par NA:

function getMax(dateArray, filler) {
      filler= filler?filler:"";
      if (!dateArray.length) {
        return filler;
      }
      var max = "";
      dateArray.forEach(function(date) {
        if (date) {
          var d = new Date(date);
          if (max && d.valueOf()>max.valueOf()) {
            max = d;
          } else if (!max) {
            max = d;
          }
        }
      });
      return max;
    };
console.log(getMax([],"NA"));
console.log(getMax(datesArray,"NA"));
console.log(getMax(datesArray));

function getMin(dateArray, filler) {
 filler = filler ? filler : "";
  if (!dateArray.length) {
    return filler;
  }
  var min = "";
  dateArray.forEach(function(date) {
    if (date) {
      var d = new Date(date);
      if (min && d.valueOf() < min.valueOf()) {
        min = d;
      } else if (!min) {
        min = d;
      }
    }
  });
  return min;
}

console.log(getMin([], "NA"));
console.log(getMin(datesArray, "NA"));
console.log(getMin(datesArray));

J'ai ajouté une démo javascript simple ici et l'ai utilisé comme un filtre avec AngularJS dans ce codepen


Quelque chose comme:

var min = dates.reduce(function (a, b) { return a < b ? a : b; }); 
var max = dates.reduce(function (a, b) { return a > b ? a : b; });

Testé sur Chrome 15.0.854.0 dev


_.min et _.max travaillent sur des tableaux de dates; utilisez-les si vous utilisez Lodash ou Underscore, et envisagez d'utiliser Lodash (qui fournit de nombreuses fonctions utilitaires comme celles-ci) si ce n'est déjà fait.

Par exemple,

_.min([
    new Date('2015-05-08T00:07:19Z'),
    new Date('2015-04-08T00:07:19Z'),
    new Date('2015-06-08T00:07:19Z')
])

retournera la deuxième date dans le tableau (car c'est le premier).


var max_date = dates.sort(function(d1, d2){
    return d2-d1;
})[0];




date