我遇到了非常奇怪的问题,请查看下面的两个示例。
我的开发环境时区: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 这是错误的
有人说清楚,这是为什么?如何解决这个问题?
任何帮助将不胜感激。
n = 18 这是错误的
不,不是。 您提供了 GMT+0000,它与 GMT 或 UTC 相同。 因此,getUTCDate
的结果当然是您传入的日期。
我想你很困惑,因为你的措辞
:我的开发环境时区:GMT+0500
我的客户时区:GMT+0000
时区不是数字偏移量。 时区可以有一个偏移量,也可以有多个偏移量,并包括偏移量随时间变化的历史记录。 请参阅时区标签维基中的"时区!=偏移量"。
因此,这些可能是您和您的客户的当前偏移量,但这并不一定意味着它们总是处于相同的偏移量中。 如果您的客户在英国,那么他们现在在 +0000,但他们很快就会在 +0100。 详情请看这里。
您的第一个日期是使用时区显式构造的,导致 UTC 日期为 17。 在时区的18日午夜,比UTC(GMT)早5小时,它仍然是伦敦的第17天。您的第二个日期是使用明确的 UTC 时区构建的。换句话说,在您的第二个约会日期指示的时间,它是第一个时区的凌晨 5 点。