【发布时间】:2015-10-20 08:16:55
【问题描述】:
我有一个自定义绑定处理程序,它返回给定日期的时间:
var item = allBindings().data;
var dateInit = new Date(item.Fecha());
var timezone = 0; //dateInit.getTimezoneOffset() * 60000;
var ticksInit = dateInit.getTime() + timezone;
var duration = item.Duracion() * 60 * 1000;
var ticksEnd = ticksInit + duration;
var hourInit = getShortTime(new Date(ticksInit));
var hourEnd = getShortTime(new Date(ticksEnd));
item.Fecha() 是一个 observable,包含 JSON 格式的日期:在这种情况下为 '2015-10-20T12:00:00'
在 Windows 浏览器上,ticksInit 的值为 1445335200000,但在 Ipad 上,它的值为 1445342400000。
相差只有两个小时,似乎 Ipad 正在应用时区校正器。
【问题讨论】:
-
您应该从不使用 Date 构造函数解析字符串,使用 your own parser 或维护良好的库手动解析它。在 ES5 中,没有时区的类 ISO 格式被视为 UTC,在 ECMAScript 2015 中,它们被视为本地(并且在以前的版本中依赖于实现)。这可以解释差异等于时区偏移量。此外,IE8 将返回 NaN(它不会原生解析 ISO 格式)。
-
使用moment.js 会容易得多。此外,您最好将时区注释掉,因为在日期中添加刻度并不是补偿时区偏移的正确方法。
标签: javascript ios ipad datetime knockout.js