【问题标题】:How to fix kendo grid datetime format depends on local time如何修复剑道网格日期时间格式取决于当地时间
【发布时间】:2021-11-08 08:37:35
【问题描述】:

我有带有 DateTime 值的剑道网格,我住在时区 GMT +02:00,但我的客户端数据库位于 GMT +06:30。

问题是,当我将数据库时间签入为 10:25 但我将浏览器时间签入为 05:55 时。

我使用的日期时间格式如下:

.ClientTemplate("#= kendo.toString(DateTran, 'dd.MM.yyyy HH:mm:ss') #")

如何解决这个问题并直接在数据库中显示值?有什么特殊的格式吗?

【问题讨论】:

    标签: c# kendo-ui kendo-grid


    【解决方案1】:

    使用带有 setter 和 getter 的 ViewModel,将 DateTime Kind 显式设置为 UTC。

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

    使用DataSource的requestEnd事件截取传入的Date字段,将其替换为时差。

    @(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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-19
      • 2014-05-04
      • 1970-01-01
      • 2019-07-11
      • 2014-07-27
      • 1970-01-01
      • 2020-07-22
      • 2019-12-22
      相关资源
      最近更新 更多