【问题标题】:ExtJS dates and timezonesExtJS 日期和时区
【发布时间】:2011-06-11 02:32:01
【问题描述】:

我有一个问题,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),但我得到的是浏览器的本地时区。如果浏览器设置为比格林威治标准时间早足够远的时区,日期的日期部分也将翻转(因此日期现在将显示为 1966 年 5 月 25 日)。

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

如果这不可能,是否可以强制 Ext 使用 GMT 而不是尝试解释时区?

【问题讨论】:

    标签: javascript date extjs timezone extjs3


    【解决方案1】:

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

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

    引用documentation of getTimezoneOffset()

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

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

    在我的计算机上,使用法语语言环境,

    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 和时间点 由参数表示。

    【讨论】:

    • 谢谢,那里有很多有用的信息。对于发生在此线程上的未来谷歌用户,我设法通过将所有日期设置为中午 12 点来解决我的问题,因此 Ext 将无法导致这一天翻转,从而解决了最初的问题。不完美,但效果很好......
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我的两分钱,因为我不能像蒂姆那样将所有时间都设置为 12:00。我发在sencha forum

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-10
        • 2011-10-29
        • 1970-01-01
        • 2018-02-04
        • 1970-01-01
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多