2011-12-13 66 views
2

我有下面的代碼,它是基於他們的日期排序數組中的javascript對象的列表。數據來自XML文件。日期的格式如下:MM-DD-YYYYJavaScript排序不工作在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

火狐似乎接受了:

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」)無效。因此你的「Date」實例總是一樣的。

你可以翻轉過來,弦,只是比較作爲字符串:

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; 
} 

火狐堅持以下IETF標準(我想從RFC-822是最初)日期。

如果有數十萬場音樂會,在排序之前將所有音樂會的日期翻轉會更有效率。

0

這裏正在工作碼fiddle

我上IE,鉻& FF驗證。