首页 > 解决方案 > 使用 Telerik 控件将数据库 UTC 时间戳呈现为本地

问题描述

我们正在使用 Telerik (PHP UI) 控件,但似乎有些东西我无法破解。

我们将时间戳存储在 UTC 的后端数据库中,当使用 Grid 显示此类项目时,我希望能够显示 UTC 时间戳转换为本地用户时区(TZ 数据存储为 PHP 变量,不同的人登录in 可能在不同的 TZ 中)。看来我不是唯一一个在问这个问题的人,因为 Telerik 论坛上有人问了同样的问题但没有答案(滚动到该论坛帖子的底部)。

从 Telerik网站看来,我所要做的就是使用在日期后附加“zzz”的格式来格式化日期,但这所做的只是将偏移量添加到显示的时间(例如2020-02-27 10:00:00-> 2020-02-27 10:00:00-0800)。 ..但它确实做到了“自动神奇”,我认为这很好......(严重讽刺)

论坛帖子还显示 onRequestEnd 调用应该做我需要它做的事情,但是当我尝试这样做时,似乎没有任何改变。

任何人都可以提供任何建议吗?

标签: teleriktelerik-grid

解决方案


注意:我使用以下内容创建了外部表:

$grid = new \Kendo\UI\Grid('grid');

解决方案:我通过在页面中添加以下内容来实现这一点:

function dataSource_requestEnd(e){
    var data = e.sender.options.data.data;
    for(var i=0; i<data.length; i++){
        var td = data[i];
        for (var key in td){
            if (key === "NameOfDateField"){
                var offset = new Date().getTimezoneOffset();
                new Date(td[key].setMinutes(td[key].getMinutes() - offset));
            }
        }
    }
 }


$(document).ready(function() {
    var dataSource = $("#grid").data("kendoGrid").dataSource;
    dataSource.bind("requestEnd", dataSource_requestEnd);
    dataSource.fetch();
});

请注意,NameOfDateField是从数据源返回的数组中键的名称。

TBH,我完全不确定数据是如何转换的,但肯定offsetlocalTime变量对于成功至关重要(尽管在我看来,它们实际上并没有更新任何东西?!)


推荐阅读