Comment puis-je connaître la date minimale et 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"))
Existe-t-il une fonction intégrée pour ce faire ou dois-je écrire la mienne?
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));
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
travaille 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 vous ne l'êtes pas déjà.
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 la plus ancienne).
Les dates étant converties en UNIX Epoch (nombres), vous pouvez utiliser Math.max/min pour rechercher celles-ci:
var maxDate = Math.max.apply(null, dates)
// convert back to date object
maxDate = new Date(maxDate)
(testé en chrome uniquement, mais devrait fonctionner dans la plupart des navigateurs)
function sortDates(a, b)
{
return a.getTime() - b.getTime();
}
var dates = [];
dates.Push(new Date("2011/06/26"))
dates.Push(new Date("2011/06/28"))
dates.Push(new Date("2011/06/25"))
dates.Push(new Date("2011/06/27"))
var sorted = dates.sort(sortDates);
var minDate = sorted[0];
var maxDate = sorted[sorted.length-1];
** Utiliser les opérateurs de spread | 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);
var max_date = dates.sort(function(d1, d2){
return d2-d1;
})[0];
BON MOT:
var min=dates.sort((a,b)=>a-b)[0], max=dates.slice(-1)[0];
résultat dans les variables min
et max
, complexité O(nlogn), exemple éditable ici . Si votre tableau a des valeurs sans date (comme null
), nettoyez-le d'abord par dates=dates.filter(d=> d instanceof Date);
.
var dates = [];
dates.Push(new Date("2011-06-25")); // I change "/" to "-" in "2011/06/25"
dates.Push(new Date("2011-06-26")); // because conosle log write dates
dates.Push(new Date("2011-06-27")); // using "-".
dates.Push(new Date("2011-06-28"));
var min=dates.sort((a,b)=>a-b)[0], max=dates.slice(-1)[0];
console.log({min,max});
Les réponses ci-dessus ne gèrent pas les valeurs vierges/non dé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é un javascript demo clair ici Et je l'ai utilisé comme filtre avec AngularJS dans ce code
Identique à celui appliqué, maintenant avec propagation :
const maxDate = new Date(Math.max(...dates));
(pourrait être un commentaire sur la meilleure réponse)
C’est un excellent moyen de faire cela (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 o.y;}))
Voici la réponse acceptée pour cette page: Recherche de la valeur maximale d'un attribut dans un tableau d'objets