Kendo DateTimePicker不处理UTC偏移

时间:2016-02-15 23:50:34

标签: javascript angularjs kendo-ui datetimepicker datetimeoffset

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

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

其中:TheDateModel = 2016-02-15 20:58:24.0000000 +00:00

我在CST时区,距GMT偏离-6小时。 datetimepicker的当前结果显示时间为晚上8:58,但我的预期结果是下午2:58。

世界上我做错了什么?

3 个答案:

答案 0 :(得分:1)

免责声明:我为Kendo UI团队工作

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

由于此默认行为,窗口小部件将使用已转换的日期值(使用应用的本地时区)。小部件不会操纵值时区,因为它没有足够的信息如何做到这一点。

<强>解决方案

在这种情况下,最好的方法是在提供DatePicker小部件之前手动转换Date字符串(如您提到的那个&#34; 2016-02-15 20:58:24.0000000 +00:00&#34;)。例如,这是一种可行的方法:

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

答案 1 :(得分:1)

所以我找到了解决问题的方法。首先为了清晰起见,对于错误的信息感到抱歉,但我的日期是从服务器上下来的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。这再次破坏了datetimepicker。更简单的修复:刚刚将我的解析格式更改为: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">

答案 2 :(得分:0)