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




dd/mm/yyyy js (9)

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?


Answers

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

_.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).


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


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


En utilisant Moment , Underscore et jQuery , itérer un tableau de dates.

Exemple de JSON:

"workerList": [{        
        "shift_start_dttm": "13/06/2017 20:21",
        "shift_end_dttm": "13/06/2017 23:59"
    }, {
        "shift_start_dttm": "03/04/2018 00:00",
        "shift_end_dttm": "03/05/2018 00:00"        
    }]

Javascript:

function getMinStartDttm(workerList) {  
    if(!_.isEmpty(workerList)) {
        var startDtArr = [];
        $.each(d.workerList, function(index,value) {                
            startDtArr.push(moment(value.shift_start_dttm.trim(), 'DD/MM/YYYY HH:mm')); 
         });            
         var startDt = _.min(startDtArr);           
         return start.format('DD/MM/YYYY HH:mm');
    } else {
        return '';
    }   
}

J'espère que cela aide.


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));

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];

Démo: http://jsfiddle.net/AlienWebguy/CdXTB/


Cheatsheet rapide:

Les termes shift / unshift et push / pop peuvent être un peu déroutants, du moins pour les gens qui ne sont pas familiers avec la programmation en C.

Si vous n'êtes pas familier avec le jargon, voici une traduction rapide des termes alternatifs, qui peuvent être plus faciles à retenir:

* array_unshift()  -  (aka Prepend ;; InsertBefore ;; InsertAtBegin )     
* array_shift()    -  (aka UnPrepend ;; RemoveBefore  ;; RemoveFromBegin )

* array_push()     -  (aka Append ;; InsertAfter   ;; InsertAtEnd )     
* array_pop()      -  (aka UnAppend ;; RemoveAfter   ;; RemoveFromEnd ) 




javascript date