2013-10-03 74 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