Trier un tableau de date de chaîne

Je veux sortinger un tableau dans l’ordre croissant. Les dates sont en format chaîne

["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"] 

Même besoin d’une fonction pour vérifier si ces dates sont sous forme continue:

 eg - Valid - ["09/06/2015", "10/06/2015", "11/06/2015"] Invalid - ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015"] 

Exemple de code:

 function sequentialDates(dates){ var temp_date_array = []; $.each(dates, function( index, date ) { //var date_flag = Date.parse(date); temp_date_array.push(date); }); console.log(temp_date_array); var last; for (var i = 0, l = temp_date_array.length; i  (24 * 60 * 60 * 1000)) return true; return false; } 

    La solution simple

    Il n’est pas nécessaire de convertir des chaînes en dates ou d’utiliser RegExp.

    La solution simple consiste à utiliser la méthode Array.sort (). La fonction de sorting définit le format de date sur YYYYMMDD, puis compare la valeur de la chaîne. Suppose que la date est entrée au format JJ / MM / AAAA.

     data.sort(function(a,b) { a = a.split('/').reverse().join(''); b = b.split('/').reverse().join(''); return a > b ? 1 : a < b ? -1 : 0; // return a.localeCompare(b); // <-- alternative }); 

    Mettre à jour:

    Un commentaire utile a suggéré d'utiliser localeCompare() pour simplifier la fonction de sorting. Cette alternative est présentée dans l'extrait de code ci-dessus.

    Exécutez Snippet pour tester

        

      Vous devrez convertir vos chaînes en dates et comparer ces dates si vous souhaitez les sortinger. Vous pouvez utiliser le paramètre sort méthode de sort pour atteindre cet objective:

       var dateSsortingngs = ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"]; var sortedSsortingngs = dateSsortingngs.sort(function(a,b) { var aComps = a.split("/"); var bComps = b.split("/"); var aDate = new Date(aComps[2], aComps[1], aComps[0]); var bDate = new Date(bComps[2], bComps[1], bComps[0]); return aDate.getTime() - bDate.getTime(); }); 

      Afin de réduire la redondance du code et de gérer différents formats de date, vous pouvez append une fonction supplémentaire permettant de créer le comparateur requirejs par la méthode de sort :

       function createSorter(dateParser) { return function(a, b) { var aDate = dateParser(a); var bDate = dateParser(b); return aDate.getTime() - bDate.getTime(); }; } dateSsortingngs.sort(createSorter(function(dateSsortingng) { var comps = dateSsortingng.split("/"); return new Date(comps[2], comps[1], comps[0]); })); 

      Vous pouvez ensuite utiliser différents formateurs de date en transmettant différentes fonctions à l’appel createSorter .

      En ce qui concerne votre deuxième question, vous pouvez créer un tableau (sortingé) de dates à partir de vos chaînes et effectuer votre logique sur ce tableau:

       function myDateParser(dateSsortingng) { var comps = dateSsortingng.split("/"); return new Date(comps[2], comps[1], comps[0]); } var sortedDates = dateSsortingngs.map(myDateParser).sort(); 

      Vous pouvez parcourir le tableau sortedDates et si vous trouvez deux dates non consécutives, vous avez des dates avec des intervalles entre elles.

       var dateRE = /^(\d{2})[\/\- ](\d{2})[\/\- ](\d{4})/; function dmyOrdA(a, b){ a = a.replace(dateRE,"$3$2$1"); b = b.replace(dateRE,"$3$2$1"); if (a>b) return 1; if (a b) return -1; if (a b) return 1; if (a b) return -1; if (a  

      Pour sortinger votre chaîne de date par ordre croissant sans altérer sa valeur , essayez ceci:

       var T = ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"]; var sortedT = T.sort(s1,s2){ var sdate1 = s1.split('/'); var sdate2 = s2.split('/'); var date1 = s1[1]+'/'+s1[0]+'/'+s1[2]; var date2 = s2[1]+'/'+s2[0]+'/'+s2[2]; if (Date.parse(date1) > Date.parse(date2)) return 1; else if (Date.parse(date1) < Date.parse(date2) return -1; else return 0; } 

      Le tableau résultant sortedT devrait être un tableau sortingé de chaîne de date.

      REMARQUE:

      Votre format de date est stocké dans dd/mm/yyyy mais le format de date standard de JavaScript est mm/dd/yyyy . Ainsi, afin d’parsingr cette chaîne en Date sans utiliser de bibliothèque de format de date externe, il est donc nécessaire de convertir la chaîne de date pour assurer la compatibilité pendant le sorting.