2013-10-03 104 views
1

我在這裏看過類似的查詢,並沒有完全回答我的問題,也沒有以我能理解的方式回答我的問題。來自MySQL的kendo-ui網格日期格式sql查詢

我從代表日期時間的MySQL數據庫中檢索字符串值,即數據庫中的「2013年10月3日05:30:45 PM」被表示爲「20131003173045」。該值在Kendo Grid的「上次登錄」列中顯示爲日期。這些都包含在使用MVC框架的面向PHP的網頁中。

此前我在SQL查詢中應用了一個日期格式,將字符串從「20131003173045」更改爲「2013年10月03日05:30:45 PM」,但這會在KendoGrid中呈現爲字符串,即11月日期可以出現在10月日期之前,4月日期首先出現等。這可理解不是所需的功能,尤其是當試圖按此列排序時。

示例代碼的頁面渲染KendoGrid:

<div class="div1"> 
    <div> 
     <table id="listGrid"></table> 
    </div> 
</div> 

<script> 
    $(function() { 
     $("#grid").kendoGrid({ 
      scrollable: false, 
      groupable: false, 
      sortable: { 
       mode: "multiple" 
      }, 
      resizable: true, 
      pageable: true, 
      dataSource: 
      { 
       transport: 
       { 
        read: { 
         url: "<?= $site_url ?>Settings/Users/List", 
         dataType: "json" 
        }, 
        parameterMap: function (model, operation) { 
         if (operation == "read") { 
          return model; 
         }        
         else if(model) { 
          return { "json" : kendo.stringify(model) }; 
         } 
         else 
          return ""; 
        }      
       }, 
       pageSize: 20, 
       serverPaging: true, 
       serverSorting: true, 
       sort: { field: "LastLogin", dir: "desc" }, 
       serverGrouping: true, 
       serverAggregates: false, 
       schema: { 
        total: "total", 
        data: "data", 
        groups: "groups" 
       } 
      }, 

      toolbar: [ { title: "", template:'<a class="k-button k-button-icontext k-grid-add" href="<?= $site_url ?>Settings/Users/Add/">Add New User</a>' }], 
      columns: [ 
       //{field: "Id", width: "40px"}, 
       {field: "UserName", title: "Alias", width: "160px"}, 
       {field: "ForeName", title: "Forename", width: "100px"}, 
       {field: "SurName", title: "Surname", width: "160px"}, 
       {field: "Initials", width: "80px"}, 
       {field: "CrmId", title: "CRM ID", width: "100px"}, 
       {field: "Dept", title: "Department", width: "100px"}, 
       {field: "Position"}, 
       // Below is the field in question 
       {field: "LastLogin", title: "Last Login", width: "160px"}, 
       {field: "BlockedStatus", title: "Status", width: "90px"}, 
       { title: "", template:'<a class="k-button k-button-icontext k-grid-edit" href="<?= $site_url ?>Settings/Users/Update/#: Id #">Edit</a>' } 
      ] 
     }); 
    }); 
</script> 

我已經看過了kendo.parseDate和kendo.toString,以及兩者結合,但似乎無法得到任何工作;我要麼獲得「null」或「20131003173045」,要麼頁面無法加載。

我無法更改數據庫數據,我只能將其格式化爲SQL查詢的一部分,這正是我最初所做的工作。

我需要整個「20131003173045」字符串變成「03 Oct,2013 05:30:45 PM」,並且仍然按照適當的時間順序排序 - 我該怎麼做,如果是kendo.parseDate和kendo。 toString是正確的工具,我做錯了什麼?

回答

0

我的建議是實現schema.parse函數,該函數將MySQL格式轉換爲Date對象,然後使用columns.format對其進行格式化。

的模式將是:

schema : { 
    data : "data", 
    total : "total", 
    groups: "groups", 
    parse : function (d) { 
     $.each(d.data, function (idx, elem) { 
      elem.LastLogin = kendo.parseDate(elem.LastLogin, "yyyyMMddHHmmss"); 
     }); 
     return d; 
    } 
} 

現在,列定義打印日期將定義一個format那就是你想要的。

{field: "LastLogin", title: "Last Login", width: "160px", format: "{0:dd MMM, yyyy hh:mm:sstt}" }}, 
+0

謝謝你的回答;我無法讓它爲我工作 - 這是關於解析函數,因爲我不明白(d)指的是什麼? 我將不得不接受答案並解決問題,因爲我被迫從這個問題繼續前進;我的上級在網站的MVC框架的一個單獨部分中完成了一個解決方法來管理SQL查詢。我相信你之前的帖子和答案是有效的,但我無法讓它在我的特定情況下工作。道歉,如果這不是處理這種情況的正確方法,但這是我的第一個問題。 –

+0

'd'是從服務器收到的數據,服務器發送的數據。然後,在那個結構中,我使用jQuery'each'迭代'data'數組的元素。對於每個元素,我使用你提到的格式解析接收日期,其中'yyyy'代表4位數的年份,'MM'代表日期爲兩位數,'dd'代表月份的日期,'HH'代表小時以24h格式和'mm'和'ss'分鐘和秒鐘。 – OnaBai