2011-09-26 22 views
1

我有一個4列表,其中第二列是日期列,格式爲「mm.dd.yyyy hh:mi am」 。默認的tablesorter不按日期列正確排序。我不得不在tablesorter中編寫我自己的解析器,但它仍然不適合我。我不確定使用的正則表達式是否正確,如果任何人都可以在下面的代碼中指出我的錯誤?我很感謝你的幫助。日期時間jQuery tablesorter解析器MM.DD.YYYY HH:MI AM格式

ts.addParser(
{ 
    id: "srsDate", 
    is: function (s) { 
     return /\d{1,2}\.\d{1,2}\.\d{1,4} \d{1,2}:\d{1,2}\s(am|pm)/.test(s); 
    }, 
    format: function (s) { 
     s = s.replace(/\./g, " "); 
     s = s.replace(/\:/g, " "); 
     s = s.replace("am", "0"); 
     s = s.replace("pm", "1"); 
     s = s.split(" "); 
     return $.tablesorter.formatFloat(new Date(s[0], s[1], s[2], s[3], s[4], s[5]).getTime() + parseInt(s[6])); 
    }, 
    type: "numeric" 
}); 

我這樣稱呼它:

myapp.Sort = function() { 
    $(myapp.config.tblHistory).tablesorter({ headers: { 1: { sorter: 'srsDate'} }, sortList: [[0, 0]] }); 
} 

我引用:date Sorting Problem with Jquery Tablesorter打造新的解析器。排序的結果不起作用。它根本不分類數據。

回答

5

我不使用tablesorter自己,但是你有沒有考慮使用Date.parse(datestring)

你的函數可以就做:

ts.addParser({ 
    id: "srsDate", 
    is: function (s) { 
     return /\d{1,2}\.\d{1,2}\.\d{1,4} \d{1,2}:\d{1,2}\s(am|pm)/.test(s); 
    }, 
    format: function (s) { 
     return Date.parse(s); 
    }, 
    type: "numeric" 
}); 

這將返回日期以毫秒爲Unix時間戳。

如果你想將它返回作爲數量,簡單的鴻溝Date.parse(s)由1000結果:

function: function (s) { 
    return (Date.parse(s)/1000); 
} 

雖然這兩種方法是好的,如果你只是對數據進行排序。

+1

果醬,感謝您的迴應。第一個解決方案解決了問題。 –

+0

沒問題。很高興我能服務。 – Bojangles