5

我有一个问题,Ext Date 类似乎为解析的日期返回了错误的时区。使用下面的代码,我为 1966 年 5 月 24 日 15:46 BST 创建了一个日期对象:

date = "1966-05-24T15:46:01+0100";
var pDate = Date.parseDate(date, "Y-m-d\\TH:i:sO", false);

然后我称之为:

console.log(pDate.getGMTOffset());

我期望得到与原始日期相关的偏移量(即 GMT + 1),但我得到的是浏览器的本地时区。如果浏览器设置为比格林威治标准时间足够远的时区,日期的日期部分也将翻转(因此日期现在将显示为 1966 年 5 月 25 日)。

有谁知道如何解决这个问题并让 Ext 识别解析日期的正确时区而不是本地浏览器时区?

如果这不可能,是否可以强制 Ext 使用 GMT 而不是试图解释时区?

4

3 回答 3

6

我检查了ExtJS 源代码中的 parseDate() 实现核心 JavaScript中的 Date 的文档,ExtJS 使用的 Date() 构造函数不支持时区信息。JavaScript Date 对象表示一个 UTC 值,没有时区。在 ExtJS 源代码中解析期间,时区丢失,而相应的分钟/秒偏移量被添加到日期。

然后我检查了ExtJS 定义的 getGMTOffset() 的源代码:它使用 JavaScript 中定义的 getTimezoneOffset() 函数构建了一个时区字符串。

引用getTimezoneOffset() 的文档

时区偏移是本地时间和格林威治标准时间 (GMT) 之间的差异。夏令时防止该值成为常数。

时区不是存储在 Date 中的变量,它是根据 Date 所在年份的时间段而变化的值。

在我的电脑上,使用法语语言环境,

new Date(2010,1,20).getTimezoneOffset()
// -60
new Date(2010,9,20).getTimezoneOffset()
// -120

编辑:此行为并非特定于 ExtJS 中的日期解析,Mozilla Doc Center 上 Date.parse() 文档中的以下注释也与此处相关:

请注意,虽然在日期字符串解析期间使用时区说明符来正确解释参数,但它们不会影响返回的值,它始终是 1970 年 1 月 1 日 00:00:00 UTC 和表示的时间点之间的毫秒数由论据。

于 2011-01-18T13:51:38.847 回答
2

我有点晚了,但在最新的 ExtJS 中,你可以传递一个可选的布尔值来防止 JS 中的“翻转”

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.Date-method-parse

于 2012-11-15T17:43:19.457 回答
0

我的两分钱,因为我不能像蒂姆那样将所有时间都设置为 12:00。我在煎茶论坛发帖

于 2011-11-01T20:29:56.010 回答