ExtJS 日期和时区
我有一个问题,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),但我得到的是而是浏览器的本地时区。如果浏览器设置的时区比 GMT 早足够远,则日期的日期部分也会滚动(因此日期现在将显示为 1966 年 5 月 25 日)。
有谁知道如何解决这个问题并让 Ext 识别解析日期的正确时区而不是本地浏览器时区?
如果这是不可能的,是否可以强制 Ext 使用 GMT 而不是尝试解释时区?
I have a problem with the Ext Date class seemingly returning the wrong timezone for a parsed date. Using the code below I create a date object for the 24th May, 1966 15:46 BST:
date = "1966-05-24T15:46:01+0100";
var pDate = Date.parseDate(date, "Y-m-d\\TH:i:sO", false);
I then call this:
console.log(pDate.getGMTOffset());
I am expecting to get the offset associated with the orignal date back (which is GMT + 1), but instead I get the local timezone of the browser instead. If the browser is set to a timezone far enough ahead GMT, the day portion of the date will also be rolled over (so the date will now appear as 25th May, 1966).
Does anyone know how to get around this and get Ext to recognise the correct timezone of the parsed date rather than the local browser timezone?
If this is not possible, can Ext be forced to use GMT rather than trying to interpret timezones?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我检查了 parseDate() 实现在 ExtJS 源代码 和 核心JavaScript中的Date文档,ExtJS使用的Date()构造函数不支持时区信息。 JavaScript Date 对象表示 UTC 值,不带时区。在 ExtJS 源代码的解析过程中,时区会丢失,而相应的以分钟/秒为单位的偏移量会添加到日期中。
然后我检查了 getGMTOffset( )由 ExtJS 定义:它使用 JavaScript 中定义的 getTimezoneOffset() 函数构建时区字符串。
引用 getTimezoneOffset() 的文档:
时区不是存储在日期中的变量,它是一个根据日期所在年份的时间段而变化的值。
在我的计算机上,使用法语区域设置,
编辑:此行为并非特定于日期在 ExtJS 中进行解析,以下注释位于 Date.parse() 文档中Mozilla 文档中心 也与此相关:
I checked the parseDate() implementation in ExtJS source code and the documentation of Date in core JavaScript, the Date() constructor used by ExtJS does not support time zone information. JavaScript Date objects represent a UTC value, without the time zone. During parsing in ExtJS source code, the time zone is lost while the corresponding offset in minutes/seconds is added to the Date.
I then checked the source code of getGMTOffset() defined by ExtJS: it builds a time-zone string using the getTimezoneOffset() function defined in JavaScript.
Quoting the documentation of getTimezoneOffset():
The time-zone is not a variable stored in the Date, it is a value that varies according to the period of the year that the Date falls in.
On my computer, with a French locale,
Edit: this behavior is not specific to Date parsing in ExtJS, the following note in the documentation of Date.parse() on Mozilla Doc Center is relevant here as well:
我有点晚了,但在最新的 ExtJS 中,您可以传递一个可选的布尔值来防止 JS 中的“翻转”
http://docs.sencha.com/ext-js/4-0/#!/api/Ext.Date-method-parse
I'm a little late but in latest ExtJS, you can pass an optional boolean to prevent the "rollover" in JS
http://docs.sencha.com/ext-js/4-0/#!/api/Ext.Date-method-parse
我的两分钱,因为我不能像蒂姆那样将所有时间都设置为 12:00。我发布在 煎茶论坛
My two cents, because I can't really set all my time to 12:00 like Tim did. I posted on the sencha forum