2017-09-19 2 views
0

J'ai une date dans le format ci-dessousmoyen le plus rapide pour trier tableau multidimensionnel avec des dates dans l'ordre chronologique

[ 
    ["First Name", "10 Sep. 2017 2:00 PM"], 
    ["First Name", "10 Sep. 2017 2:00 PM"], 
    ["First Name", "10 Sep. 2017 1:00 PM"], 
    ["First Name", "10 Sep. 2017 8:00 AM"], 
    ["First Name", "9 Sep. 2017 2:00 PM"], 
    ["First Name", "9 Sep. 2017 2:00 PM"], 
    ["First Name", "9 Sep. 2017 1:00 PM"], 
    ["First Name", "9 Sep. 2017 8:00 AM"] 
] 

et que vous voulez que ce soit la sortie:

[ 
    ["First Name", "10 Sep. 2017 8:00 AM"], 
    ["First Name", "10 Sep. 2017 1:00 PM"], 
    ["First Name", "10 Sep. 2017 2:00 PM"], 
    ["First Name", "10 Sep. 2017 2:00 PM"], 
    ["First Name", "9 Sep. 2017 8:00 AM"], 
    ["First Name", "9 Sep. 2017 1:00 PM"], 
    ["First Name", "9 Sep. 2017 2:00 PM"], 
    ["First Name", "9 Sep. 2017 2:00 PM"] 
] 

Remarquez comment les dates sont ordre mais les temps ont été changés chronologiquement. En d'autres termes, les temps étaient inversés. Comment puis-je faire ceci? Voici mon code avant que je dois générer le premier tableau d'échantillons

function sortTable(data) { 

    return sortTableHelper(data); 

    function sortTableHelper(data) { 
    data = data.sort((elem1, elem2) => { 
    var date1 = moment(elem1[1], 'D MMM YYYY h:m A') 
     , date2 = moment(elem2[1], 'D MMM YYYY h:m A'); 

    if (date1.isAfter(date2)) return 1; 

    return -1; 
    }); 

    return data; 
} 
} 

Comment puis-je modifier le code de tri existant que je dois mettre le temps dans l'ordre chronologique?

Répondre

1

Inverser le code de retour afin que vos résultats montent plutôt que décroissant:

if (date2.isAfter(date1)) return 1; 
if (date1.isAfter(date2)) return -1; 
return 0; 

Remarque J'ai changé le code pour revenir 0 lorsque les éléments sont égaux.

0

Vous devez trier par date sans les heures et les heures pour obtenir le résultat souhaité, comme ceci:

var input = [["First Name", "10 Sep. 2017 2:00 PM"], ["First Name", "10 Sep. 2017 2:00 PM"], ["First Name", "10 Sep. 2017 1:00 PM"], ["First Name", "10 Sep. 2017 8:00 AM"], ["First Name", "9 Sep. 2017 2:00 PM"], ["First Name", "9 Sep. 2017 2:00 PM"], ["First Name", "9 Sep. 2017 1:00 PM"], ["First Name", "9 Sep. 2017 8:00 AM"]]; 
 

 
function sortTable(data) { 
 

 
    return sortTableHelper(data); 
 

 
    function sortTableHelper(data) { 
 

 
    return data.sort((a, b) => { 
 
    var dateA = new Date(a[1]); 
 
    var dateB = new Date(b[1]); 
 
    
 
    return dateA.getHours() - dateB.getHours() + dateB.setHours(0) - dateA.setHours(0); 
 
    }); 
 
} 
 
} 
 

 
console.log(sortTable(input));

Remarque: Fait sans momentjs.