2013-01-05 57 views
0

我正在構建一個網頁,從YouTube和Vimeo中提取視頻,爲它們創建縮略圖,然後應按日期對縮略圖進行排序。我目前正在查詢vVimeo專輯API endpointYouTube data API--它們都以稍微不同的方式返回視頻的日期。JavaScript/YouTube和vimeo API - 協調日期格式和排序

的YouTube日期:2012-12-20T08:00:40.000Z

VIMEO日期:2013年1月2日13時33分51秒

我的問題是,我該怎麼弄這兩種不同的格式轉化爲單獨的格式,然後我可以使用JavaScript/jQuery進行排序?我假設如果我設法去掉破折號,空格和冒號,刪除YouTube日期中的「t」和「z」,我會得到一個可以排序的實際數字 - 但它看起來有點j,,我希望有一個更好的方式來格式化這些。有人有主意嗎?

回答

1

我會將日期轉換爲一個Javascript日期對象,然後從實例getTime()進行排序。

讓我們做一個例子:

var dates = []; 
dates.push(new Date('2013-01-02 13:33:51')); 
dates.push(new Date('2012-12-20T08:00:40.000Z')); 

現在你有一個要排序2個日期的數組。我們開始做吧!

function sortByDate(a, b) { 
    return a.getTime() - b.getTime(); 
} 

dates.sort(sortByDate); 

如果你想有一個後代排序,只是顛倒a和b:

function sortByDate(a, b) { 
    return b.getTime() - a.getTime(); 
} 

後,你可以檢查你的陣列已經有序做console.log(dates)

因此,爲了回答這個問題,你只需要在日期對象中轉換日期字符串,然後你就可以比較排序。

故障與Internet Explorer,檢查:

更新時間:

但是,如果你計劃有任何瀏覽器的兼容性,可以使用高級瀏覽器日期轉換器,像這個項目:JS Date Format

+0

'a.getDate() - b.getDate()'不正確。例如,代碼將錯誤地暗示「2012-01-10」大於「2012-02-09」。使用'.getTime()'。 –

+0

@SalmanA你是對的,昨天晚上我寫了這段代碼,當我測試時,我已經厭倦了我使用'.getTime()',我不知道爲什麼我用'.getDate ()'。我比較時間戳,以確保排序工作。我也已經測試過,並且工作過,但是這種方式是合乎邏輯的。 –

+0

對不起 - 我沒有選擇這個作爲正確的答案,因爲Chrome是我可以使用它的唯一瀏覽器。 – mheavers

0

只需將日期解析爲自1970年1月1日以來的毫秒數。這就是JavaScript所使用的。

+0

IE7(也許8)將有這樣的日期問題。 –

+0

@SalmanA,你在說什麼?謹慎解釋一個例子? – Brad

+0

在IE7中,'new Date('2013-01-02 13:33:51')'''new Date('2013-01-02')'返回NaN。 –