getUTCDate()不同时区的函数问题

时间:2014-03-04 17:19:28

标签: javascript datetime timezone

我面临一个非常奇怪的问题,请看下面的两个例子。

我的开发环境时区:GMT + 0500

当我使用以下功能时:

var d = new Date("Tue Mar 18 2014 00:00:00 GMT+0500");
var n = d.getUTCDate(); 

n = 17这是正确的(返回特定当地时间,日期时间的月份的UTC日期),一切都在我的时区完美运行。

我的客户时区:GMT + 0000

var d = new Date("Tue Mar 18 2014 00:00:00 GMT+0000");
var n = d.getUTCDate(); 

n = 18这是错误的

任何人都说清楚为什么会这样?如何解决这个问题?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

  

n = 18这是错误的

不,不是。您提供的GMT + 0000与GMT或UTC相同。因此getUTCDate的结果当然是您传入的日期。

我认为你因为你的措辞而感到困惑:

  

我的开发环境时区:GMT + 0500

     

我的客户时区:GMT + 0000

时区不是数字偏移量。时区可以具有偏移量或多个偏移量,并包括偏移量随时间变化的历史记录。请参阅the timezone tag wiki中的“时区!=偏移”。

因此,对于您和您的客户来说,这些可能是当前的偏移量,但这并不一定意味着它们总是在同一偏移量中。如果您的客户在英国,那么他们现在在+0000,但他们很快就会在+0100。 See here for details

答案 1 :(得分:0)

您的第一个日期是使用时区显式构建的,该时区导致UTC日期为17.在时区的18日午夜,UTC(格林威治标准时间)的提前 5小时,它仍然是第17个在伦敦。您的第二个日期是使用显式UTC时区构建的。在您的第二个日期所示的时间,换句话说,它是在第一个时区的早上5点。