我已经设置了一个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;
};
问题是当我检查控制台时,它仍然显示错误的时间......它仍然受到我的电脑时区的影响...例如,对于香港的用户,上面引用的时间会产生:
Mon Oct 03 2011 05:00:00 GMT + 0800(HKT)
我确实给它一个有效的ISO8601时间字符串,它只是调整它。返回的实际时间是正确的(在那个时区)......但为什么它会像那样调整它?我希望它返回CET时间而不是当地时间...
答案 0 :(得分:15)
一切都很好,试试这个:
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)