如何修复剑道网格日期时间格式取决于当地时间



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

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

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

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

如何修复此问题并直接在数据库中显示值?有什么特殊的格式吗?

使用带有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>

最新更新