Kendo Grid DateTime列显示不正确的日期



我有一个kendo网格,它具有DateTime列,同时从数据库中获取日期,我们得到了正确的日期,但在显示日期期间更改。for ex:DB日期为07/06/2017,但是在网站上显示时,它已更改为06/06/2017,考虑使用mm/dd/yyyy。任何人都可以帮我吗?我们的DB和网站都位于纽约地区。

kendo ui dataSource使用日期的javascript日期对象。这些对象始终位于客户端的时区,这可能会导致日期变化。一个可能的选择是使用UTC日期:

http://docs.telerik.com/aspnet-mvc/helpers/grid/grid/how-to/editing/utc time-on-both-server-server-and-client


编辑,只需复制链接的内容与此处,因为不喜欢链接唯一的答案

使用与六元器的ViewModel和一个明确将DateTime类型设置为UTC的Getter。

private DateTime birthDate;
public DateTime BirthDate
{
    get { return this.birthDate; }
    set {
        this.birthDate = new DateTime(value.Ticks, DateTimeKind.Utc);
    }
}

使用DataSourcerequestEnd事件拦截并替换传入的日期字段。

@(Html.Kendo().Grid<KendoUIMVC5.Models.Person>().Name("persons")
    .DataSource(dataSource => dataSource
        .Ajax()
        .Events(ev=>ev.RequestEnd("onRequestEnd"))
    )
    // ...
)
<script>
    var onRequestEnd = function(e) {
        if (e.response.Data && e.response.Data.length) {
            var data = e.response.Data;
            if (this.group().length && e.type == "read") {
                handleGroups(data);
            } else {
                loopRecords(data);
            }
        }
    }
    function handleGroups(groups) {
        for (var i = 0; i < groups.length; i++) {
            var gr = groups[i];
            offsetDateFields(gr); //handle the Key variable as well
            if (gr.HasSubgroups) {
                handleGroups(gr.Items)
            } else {
                loopRecords(gr.Items);
            }
        }
    }
    function loopRecords(persons) {
        for (var i = 0; i < persons.length; i++) {
            var person = persons[i];
            offsetDateFields(person);
        }
    }
    function offsetDateFields(obj) {
        for (var name in obj) {
            var prop = obj[name];
            if (typeof (prop) === "string" && prop.indexOf("/Date(") == 0) {
                obj[name] = prop.replace(/d+/, function (n) {
                    var offsetMiliseconds = new Date(parseInt(n)).getTimezoneOffset() * 60000;
                    return parseInt(n) + offsetMiliseconds
                });
            }
        }
    }
</script>

最新更新