KendoUI Scheduler时区问题:发送至服务器时时间偏移两小时
KendoUI Scheduler 时区偏移问题解决方案
确认全链路时区配置一致
除了在Scheduler组件上设置timezone: "Europe/Rome",还要给DataSource的日期字段明确指定时区,避免字段解析时出现偏差:schema: { model: { fields: { start: { type: "date", timezone: "Europe/Rome" }, end: { type: "date", timezone: "Europe/Rome" } } } }手动控制日期序列化逻辑
Kendo默认会将日期转为UTC后发送,导致服务器解析时出现偏移。可以重写DataSource的请求数据处理函数,把日期转为Europe/Rome时区的本地时间再提交:transport: { create: { url: "/your-api-endpoint", type: "POST", data: function(data) { const romeTz = kendo.timezone.getTimezone("Europe/Rome"); data.start = romeTz.toLocalDate(new Date(data.start)); data.end = romeTz.toLocalDate(new Date(data.end)); return data; } }, update: { url: "/your-api-endpoint/{id}", type: "PUT", data: function(data) { const romeTz = kendo.timezone.getTimezone("Europe/Rome"); data.start = romeTz.toLocalDate(new Date(data.start)); data.end = romeTz.toLocalDate(new Date(data.end)); return data; } } }关闭UTC自动转换开关
检查Scheduler和DataSource的utc配置,若设置为true会强制日期转UTC发送,需将其改为false:$("#scheduler").kendoScheduler({ timezone: "Europe/Rome", utc: false, // 其他配置项 });服务器端强制时区解析
服务器端统一使用Europe/Rome时区解析日期,不受系统文化设置影响。以.NET为例,可全局配置:services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); });
内容的提问来源于stack exchange,提问作者pinale
相关产品推荐
相关产品推荐

