2011-12-13 14 views
2

私は、日付に基づいて配列内のjavascriptオブジェクトのリストをソートする次のコードを持っています。データはXMLファイルから取得されます。 MM-DD-YYYYをJavaScriptでJavaScriptの並べ替えがFirefoxで機能しない

concert=new Object(); 
concert.performer=performerName; 
concert.date=concertDate; 
concerts[0]=concert; //adding to array in a for loop 

だから、この段階で、私は私のコンサート配列のコンサートオブジェクトの負荷を持って次のように日付がフォーマットされます。 私は、それをテーブルにそれをソートするために行くと、出力:

sortedConcerts = concerts.sort(sortConcerts); 

function sortConcerts(a, b){ 
var firstConcert=new Date(a.date); 
var secondConcert=new Date(b.date); 
return firstConcert-secondConcert; 
} 

私は、私は、テーブルまたは何を使用してプリントアウトし、新たなソートされた配列を持っています。

私の問題は、IEとChromeではうまくいきますが、Firefoxではうまくいきません... Firefoxには好きではない点は何ですか?

+2

Javascriptコンソールをご覧ください。それは文句? – Jon

+1

これらの「concertDate」値は正確にどのように見えますか?コンパイラルーチンでは、値が文字列でない限り、新しい "Date"インスタンスを作成する必要はなく、文字列の場合は、 "Date"インスタンスを作成するための正しい形式である必要があります。 – Pointy

+0

正確に何が動作していない、並べ替えですか?どのようなエラーメッセージが表示されますか? –

答えて

1

Firefoxを受け入れているようだ:

new Date("Jan 1 2009"); 
new Date("January 1 2009"); 
new Date("1 1 2009"); 
new Date("1/1/2009"); 

ただし、ハイフンを使用すると、あなたの数学的操作のためにはNaNになり、無効な日付形式、(あなたのケースでは、減算)を与えます。

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に有効な日付形式の記事があります。ここで

+0

私は参照してください。なぜIEとChromeがハイフンに気にしないのだろうか?助けていただきありがとうございます。代わりにフォワードスラッシュを試してみました。 – Markus

2

日付の書式( "MM-DD-YYYY")は無効です。したがって、あなたの "日付"インスタンスは常に同じです。

あなたの周りの文字列を反転し、ちょうど文字列として比較することができます:

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はIETF標準を(私はそれが元々RFC-822からだと思います)次の日付を主張しています。

コンサートが数多くある場合は、並べ替える前にすべてのコンサートの日付を前後に並べる方が効率的です。

0

は、私はIE、クローム& FFに検証コードfiddle

が機能しています。

関連する問題