我面临一个非常奇怪的问题,请看下面的两个例子。
我的开发环境时区: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这是错误的
任何人都说清楚为什么会这样?如何解决这个问题?
任何帮助将不胜感激。
答案 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点。