剑道日期时间选取器不处理 UTC 偏移量

Kendo DateTimePicker Not Handling UTC Offset

本文关键字:处理 UTC 偏移量 选取 日期 时间      更新时间:2023-09-26

我们使用 Kendo datetimepicker,使用 AngularJS 指令实现:

<input type="text" kendo-date-time-picker k-ng-model="TheDateModel">

其中:日期模型 = 2016-02-15 20:58:24.0000000 +00:00

我在CST时区,与GMT相差-6小时。日期时间选择器的当前结果显示时间为晚上 8:58,但我的预期结果是下午 2:58。

我到底做错了什么?

免责声明:我在剑道UI团队工作

Kendo UI 日期选取器在内部使用 JavaScript Date 对象来保存选定的日期值。您可能知道,它始终使用本地(浏览器(时区。我们也试图在我们的文档中解释这个警告:

  • JavaScript 日期对象 - 基础知识

由于此默认行为,小组件将使用已转换的日期值(使用应用的本地时区(。该小部件不会操作值时区,因为它没有足够的信息来执行此操作。

溶液

在这种情况下,最好的方法是在输入 DatePicker 小部件之前手动转换 Date 字符串(如您提到的"2016-02-15 20:58:24.0000000 +00:00"(。例如,这里有一种可能的方法可以做到这一点:

  • http://dojo.telerik.com/EyuRA

请注意如何在 loadData 方法中分析值,然后进行调整。需要在其应用程序中处理不同 TZ 的开发人员应该做类似的事情。

我一直在这条路上,不得不实现这个:

http://www.telerik.com/support/code-library/using-utc-time-on-both-client-and-server-sides

所以我找到了解决问题的方法。首先为了清楚起见,很抱歉提供错误信息,但我的日期从服务器中下来为 2016-02-15T20:58:24.0000000+00:00 - 添加 T 并删除所有空格。

所有需要做的是将 k-parse-formats 属性添加到指令中,如下所示:

 <input type="text" kendo-date-time-picker k-parse-formats=['yyyy-MM-ddTHH:mm:sszzz'] k-ng-model="TheDateModel">

Boom,考虑偏移量和您当前的时区,并正确解析和显示日期和时间。请注意,当您指定自己的解析格式时,要包括日期可能的所有可能格式。

例如,然后我遇到了一个问题,即我的日期的毫秒数大于 0:2016-02-15T20:58:24.1234567+00:00。这再次破坏了日期时间选择器。更简单的修复:刚刚将我的解析格式更改为:yyyy-MM-ddTHH:mm:ss.fffffffzzz。确保 f 的数大于或等于可能的毫秒数。

<input type="text" kendo-date-time-picker k-parse-formats=['yyyy-MM-ddTHH:mm:ss.fffffffzzz'] k-ng-model="TheDateModel">