我有一个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而不是试图解释时区吗?
答案 0 :(得分:6)
我检查了parseDate() implementation in ExtJS source code和documentation 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
上