ExtJS日期和时区

Tim*_*imS 5 javascript timezone extjs date extjs3

我有一个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);
Run Code Online (Sandbox Code Playgroud)

然后我称之为:

console.log(pDate.getGMTOffset());
Run Code Online (Sandbox Code Playgroud)

我希望得到与orignal日期相关的偏移量(GMT + 1),但我得到的是浏览器的本地时区.如果浏览器设置为远远超过GMT的时区,则日期的日期部分也将被翻转(因此日期现在将显示为1966年5月25日).

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

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

Eri*_*ier 6

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

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

引用getTimezoneOffset()文档:

时区偏移是当地时间与格林威治标准时间(GMT)之间的差异.夏令时可以防止此值成为常量.

时区不是存储在日期中的变量,它是根据日期所属的年份而变化的值.

在我的电脑上,使用法语区域设置,

new Date(2010,1,20).getTimezoneOffset()
// -60
new Date(2010,9,20).getTimezoneOffset()
// -120
Run Code Online (Sandbox Code Playgroud)

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

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

  • 谢谢,那里有很多有用的信息.对于发生在这个线程上的未来googlers,我设法通过将所有日期设置为中午12.00来解决我的问题,因此Ext将无法导致当天翻转从而解决原始问题.不完美,但它运作良好.... (2认同)