【问题标题】:getUTCDate() Function Issue in Different Time Zones不同时区的 getUTCDate() 函数问题
【发布时间】:2014-03-04 17:19:28
【问题描述】:

我遇到了一个很奇怪的问题,请看下面的两个例子。

我的开发环境时区: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 这是错误的

任何人都放了一些光,为什么?如何解决这个问题?

任何帮助将不胜感激。

【问题讨论】:

  • 这个答案对我来说是正确的。您输入的是 UTC 日期,因此 UTC 日期应该是同一天。
  • 您的日期字符串不同;为什么结果不会不同?
  • 当您在日期字符串中包含时区时,计算机的时区无关紧要。

标签: javascript datetime timezone


【解决方案1】:

n = 18 这是错误的

不,不是。您提供了 GMT+0000,它与 GMT 或 UTC 相同。所以getUTCDate的结果当然是你传入的日期。

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

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

我的客户时区:GMT+0000

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

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

【讨论】:

    【解决方案2】:

    您的第一个日期明确构造了一个时区,导致 UTC 日期为 17。在 UTC (GMT) 提前 5 小时的时区 18 日午夜,它仍然是 17 日在伦敦。您的第二个日期是使用明确的 UTC 时区构造的。在您的第二个日期所指示的时间,即第一个时区的早上 5 点。

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 2021-06-14
      • 2020-09-18
      • 2010-11-18
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多