我在这里寻找过类似的查询,没有一个能完全回答我的问题,无论是全部的,还是以我能理解的方式。
我从表示日期时间的MySQL数据库中检索一个字符串值,即"03 Oct, 2013 05:30:45PM"在数据库中表示为"20131003173045"。此值在剑道网格的"上次登录"列中显示为日期。这一切都包含在使用 MVC 框架的面向 PHP 的网页中。
以前我在 SQL 查询中应用了日期格式将字符串从"20131003173045"更改为"03 Oct, 2013 05:30:45PM",但这在 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:45PM",并且仍然按正确的时间顺序排序 - 我该怎么做,如果 kendo.parseDate 和 kendo.toString 是正确的工具,我做错了什么?
我的建议是实现一个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}" }},