9

我已经设置了一个从服务器返回当前时间的 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 时间而不是当地时间...

4

1 回答 1

15

一切都很好,试试这个:

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

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

如果您坚持使用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)
于 2011-10-02T21:23:16.467 回答