J'ai le code suivant qui trie une liste d'objets javascript dans un tableau en fonction de leur date. Les données proviennent d'un fichier XML. La date est formatée comme suit: MM-DD-YYYY
concert=new Object();
concert.performer=performerName;
concert.date=concertDate;
concerts[0]=concert; //adding to array in a for loop
Donc, à ce stade, j'ai une charge d'objets de concert dans ma gamme de concerts. Je vais ensuite le trier et le sortir dans une table:
sortedConcerts = concerts.sort(sortConcerts);
function sortConcerts(a, b){
var firstConcert=new Date(a.date);
var secondConcert=new Date(b.date);
return firstConcert-secondConcert;
}
J'ai alors le nouveau tableau trié que j'imprime à l'aide d'une table ou autre.
Mon problème est que cela fonctionne bien dans IE et Chrome, mais pas dans Firefox ... qu'est-ce que Firefox n'aime pas?
3 réponses
Firefox semble accepter:
new Date("Jan 1 2009");
new Date("January 1 2009");
new Date("1 1 2009");
new Date("1/1/2009");
Cependant, l'utilisation des traits d'union vous donne un format de date non valide, qui se traduit par NaN pour les opérations mathématiques (dans votre cas, soustraction);
new Date("1/1/2009") - new Date("1-1-2009"); // NaN in Firefox, 0 in other browsers
new Date("1/1/2009") - new Date("1/1/2009"); // 0 in all browsers.
MDN contient un article sur les formats de date valides.
Voici le code fonctionnel violon
J'ai vérifié sur IE, Chrome et FF.
Votre format de date ("MM-JJ-AAAA") n'est pas valide. Ainsi vos instances "Date" sont toujours identiques.
Vous pouvez inverser les chaînes et comparer simplement en tant que chaînes:
function sortConcerts(a, b) {
function flipDate(d) {
return d.replace(/(\d\d)-(\d\d)-(\d\d\d\d)/, "$3-$1-$2");
}
var d1 = flipDate(a.date), d2 = flipDate(b.date);
return d1 > d2 ? 1 : d2 > d1 ? -1 : 0;
}
Firefox insiste pour que les dates respectent les normes IETF (je pense que c'est de la RFC-822 à l'origine).
S'il y a un zillion de concerts, il serait plus efficace de retourner les dates de tous les concerts avant de les trier.
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.