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而不是试图解释时区吗?
我检查了ExtJS源代码中的parseDate()实现和核心JavaScript中Date的文档, ExtJS使用的Date()构造函数不支持时区信息.JavaScript Date对象表示UTC值,没有时区.在ExtJS源代码中解析期间,时区丢失,而相应的偏移量以分钟/秒为单位添加到日期.
然后我检查了ExtJS定义的getGMTOffset()的源代码:它使用JavaScript中定义的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和表示的时间点之间的毫秒数通过论证.