2013-05-30 55 views
0

我在MVC3 c#中實現了一個數據表。所有在本地開發機器上正常工作,包括排序DateTime列。MVC jQuery數據表日期排序問題

但是,當我將其上載到服務器並訪問網頁時,數據表排序對於DateTime列沒有正確排序。

進一步測試,我發現不同的瀏覽器(Chrome和IE9)產生不同的結果。

使用DataTables調試,可在http://debug.datatables.net/,我發現數據類型顯示爲字符串類型而不是日期類型。雖然我使用vs2010在本地開發環境上運行,但調試結果顯示爲日期類型,可以進行正確排序。

這很奇怪,因爲我上傳了相同的文件副本到服務器,但結果是不一樣的。

Any1遇到此問題b4?

以下是我的代碼:

<script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery-1.7.2.min.js")" ></script> 
     <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery.dataTables.min.js")" ></script> 
     <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery.jeditable.js")" ></script> 
     <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery-ui.js")" ></script> 
     <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery.validate.js")" ></script> 
     <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery.DataTables.editable.js")" ></script> 

     <script language="JavaScript" type="text/javascript"> 
      $(document).ready(function() { 

       jQuery.fn.dataTableExt.oSort['us_date-asc'] = function (a, b) { 
        var x = new Date(a), 
        y = new Date(b); 
        return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
       }; 

       jQuery.fn.dataTableExt.oSort['us_date-desc'] = function (a, b) { 
        var x = new Date(a), 
        y = new Date(b); 
        return ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
       }; 

       $('#myDataTable').dataTable({ "bJQueryUI": true, 
        "sPaginationType": "full_numbers", 
//     aaSorting defined the column to be sorted 
        "aaSorting": [[2, "desc"]] 
       }).makeEditable({ sUpdateURL: "UpdateData", 
        "aoColumns": 
         [ 
         numeric, 
         string, 
         { "sType": "us_date"}, 
         date, 
         string, 
         string 

         ] 
       }); 
      }) 

    </script> 

回答

0

如果你輸入的字符串總是在mm/dd/yyyy格式,你應該只使用現有datetime_us排序選項。 Reference here

如果你想要更多的控制,你可以使用上市on the same page其他選項之一,或考慮使用moment.js

// moment lets you specify the input format to parse 
var x = moment(a, "MM/DD/YYYY HH:mm:ss"), 
    y = moment(b, "MM/DD/YYYY HH:mm:ss"); 

// same as before 
return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
0

我試圖將datetime-美國法和問題仍然存在。

我仍然不明白爲什麼javascript Date()不能識別C#DateTime格式在我的服務器,但它在我的本地開發環境。

我對我的問題的解決方案是明確地改變DateTime格式與 的ToString( 「YYYY-MM-DDTHH:MM:SS」),然後一切正確排序。

馬特約翰遜,thx爲您的答覆雖然。