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?

2
Markus 13 déc. 2011 à 18:33

3 réponses

Meilleure réponse

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.

2
Dennis 13 déc. 2011 à 14:51

Voici le code fonctionnel violon

J'ai vérifié sur IE, Chrome et FF.

0
Sandeep G B 13 déc. 2011 à 14:53

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.

2
Pointy 13 déc. 2011 à 14:51
8490907