ExtJS 日期和时区

发布于 2024-10-12 13:54:45 字数 495 浏览 1 评论 0原文

我有一个问题,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

懵少女 2024-10-19 13:54:45

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

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

引用 getTimezoneOffset() 的文档:

时区偏移量就是差异
当地时间与格林威治标准时间之间
时间(格林尼治标准时间)。夏令时
防止该值成为
常数。

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

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

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

编辑:此行为并非特定于日期在 ExtJS 中进行解析,以下注释位于 Date.parse() 文档中Mozilla 文档中心 也与此相关:

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

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 offset is the difference
between local time and Greenwich Mean
Time (GMT). Daylight savings time
prevents this value from being a
constant.

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,

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

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:

Note that while time zone specifiers
are used during date string parsing to
properly interpret the argument, they
do not affect the value returned,
which is always the number of
milliseconds between January 1, 1970
00:00:00 UTC and the point in time
represented by the argument.

╰沐子 2024-10-19 13:54:45

我有点晚了,但在最新的 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

离笑几人歌 2024-10-19 13:54:45

我的两分钱,因为我不能像蒂姆那样将所有时间都设置为 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文