烦人的javascript时区调整问题

2024-03-31

我已经设置了一个 JSON 端点,它从服务器返回当前时间。例如:

{
  "myservertime": "2011-10-02T23:00+02:00"
}

现在是 CET 夏季时间。

现在,我还有一个 jQuery 代码可以很好地解析它。

$.sysTime = function(success) {

            $.ajax({
                url: '/jsontimepath/',
                dataType: 'json',
                async: false,
                success: function(json){
                    sysDateTime = new Date(Date.parse(json.myservertime));
                    console.log('The system time now is: ' + sysDateTime)
                }
            });

            return sysDateTime;
        };  

问题是,当我检查控制台时,它仍然显示错误的时间...它仍然受到我的计算机时区的影响...例如,对于香港的用户,上面引用的时间将导致:

2011 年 10 月 3 日星期一 05:00:00 GMT+0800 (HKT)

我确实给了它一个有效的 ISO8601 时间字符串,它只是调整它。返回的实际时间是正确的(在那个时区)...但是为什么它会这样调整???我希望它返回 CET 时间而不是当地时间......


一切都很好,试试这个:

new Date(Date.parse("2011-10-02T23:00+02:00")).getUTCHours()  //21

日期解析正确(按预期考虑时区)。但是,当您只是打印时Date.toString()它显示当前浏览器时区的日期(Java 的罪过之一Date对象无耻地复制到 JavaScript...)

如果你坚持getUTC*()通过一系列方法,您将获得正确的值(如上面的示例所示)。普通的get*()方法始终受到浏览器时区的影响(而不是您解析日期的时区,该时区会丢失),因此通常无用。

另一个例子:2011-10-03 02:00+03:00实际上是 10 月 2 日 23:00。但是当你解析它时(我当前的浏览器时区是+0200(CEST)):

new Date(Date.parse("2011-10-03T02:00+03:00"))  //Oct 03 01:00:00 GMT+0200

然而,UTC 月份当前日期是:

new Date(Date.parse("2011-10-03T02:00+03:00")).getUTCDate()  //2 (2nd of Oct)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

烦人的javascript时区调整问题 的相关文章

随机推荐