ExtJS日期和时区

时间:2011-01-18 13:22:15

标签: javascript date extjs timezone 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);

然后我称之为:

console.log(pDate.getGMTOffset());

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

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

如果无法做到这一点,可以强制Ext使用GMT而不是试图解释时区吗?

3 个答案:

答案 0 :(得分:6)

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

然后检查source code of getGMTOffset() defined by ExtJS:它使用JavaScript中定义的getTimezoneOffset()函数构建时区字符串。

引用documentation of getTimezoneOffset()

  

时区偏移是差异   当地时间和格林威治标准间   时间(GMT)。夏令时   防止这个值成为一个   恒定。

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

在我的计算机上,使用法语区域设置

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

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

  

请注意,虽然是时区说明符   在日期字符串解析期间使用   他们正确地解释了这个论点   不影响返回的值,   这总是数量   1970年1月1日之间的毫秒数   00:00:00 UTC和时间点   由论证代表。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

我的两分钱,因为我不能像蒂姆那样把所有的时间都安排到12点。我发布在sencha forum