【问题标题】:Is the GMT time zone is same all over world?世界各地的GMT时区都一样吗?
【发布时间】:2013-09-04 06:42:51
【问题描述】:

我的服务器正在运行 PHP。我正在使用gmdate() 函数将记录从服务器插入到我的数据库中。我只是想知道时区是否通过使用gmdate() 函数来集中?

例子:

一个用户从印度创建条目并将记录插入数据库

第二个用户从美国/加拿大/法国创建条目并将记录插入数据库。

那个时间会和我在服务器插入记录时使用gmdate()函数一样吗?

【问题讨论】:

  • 如果你做一个插入,数据库服务器看到的时间只是机器时间——它没有考虑你的用户在哪里。对于 Web 应用程序,您通常只通过一个用户访问数据库,因此数据库服务器不知道您的用户在哪里。但是,如果您希望印度用户看到基于他们自己的时区的时间戳,那么您需要允许他们在个人资料页面中设置他们的时区,并且您可以在呈现时间和日期时考虑到这一点。
  • 那么机器时间是多少?
  • 我所说的“机器时间”是系统时钟,考虑到它的时区(在 MySQL 或 PHP 中配置,取决于你从哪里得到它)。由于您引用了 PHP 函数,因此请确保您的 php.ini 已针对您的时区正确配置。
  • 所以你想说我在插入记录时只使用 date() 函数而不是 gmtdate 函数?
  • 嗯,这取决于你想做什么。假设您的服务器在印度,并且该服务器上的 PHP 时区设置正确。如果您使用date,那么您的时间戳将是本地的,如果您使用gmdate(不是gmtdate),那么您的时间戳将是GMT。我想说,如果您的所有服务器都在印度,请使用本地服务器,如果它们在不同的地方,请使用 GMT。

标签: php time timezone gmt centralized


【解决方案1】:

首先,函数被称为gmdate,而不是gmtdategmatdate。但我会假设这些是拼写错误。

GMT 是格林威治标准时间的缩写。它的名称对某些人来说有点令人困惑,例如在英国英格兰格林威治,他们在冬季遵循格林威治标准时间,在夏季遵循 BST(英国夏令时)。这是英国使用的夏令时形式。但 GMT 总是 指的是标准时间,而不是夏令时。换句话说,GMT 是一个不遵循夏令时的固定时区,尽管它的物理位置确实如此。

为了澄清这一点,但为了避免混淆,我们更喜欢使用 UTC 一词,它代表通用协调时间(是的,字母不按顺序排列,这是有原因的,这里不相关)。 UTC 是一种公认​​的国际标准计时系统。它的定义有几个部分,但这里重要的部分是它将其基线定义为与 GMT 相同。或者根据您的要求,GMT 现在定义为与 UTC 相同。没关系 - 它们实际上是相同的。

是的,无论你在世界的哪个地方谈论它,当你使用gmdate() 函数返回它时,你应该得到相同的时间。

使用 UTC 的重要原因是服务器应用程序不应该依赖于任何本地时区。谁知道,有一天您可能会拿起您的数据并将其移动到另一个位置,或者将其迁移到云中,或者与其他地方的服务器进行交互。这样做时,如果您的时间是 UTC,那么您的参考点都是一样的,所以一切都会很好。

另一方面,如果您存储当地时间然后移动到其他地方,那么您的所有数据都必须更新。即使您从不搬家——如果您的当地时间是美国、英国或许多其他地方,这些地方也将夏令时作为其时区的一部分。这意味着您可以存储每年至少一小时不明确的当地时间。这可不是什么好事。

UTC/GMT 的替代方法是存储日期+时间+偏移值。然后你会知道当地时间,以及它与 UTC 的关系(通过偏移量)。但我仍然会将其保留为与当地时间相关的值。我的意思是,谁真正关心服务器的本地时间呢?如果它没有相关的业务上下文,那么你不应该将它引入你的应用程序中。

【讨论】:

  • 旁注 - 我可以用“是”和link to Wikipedia 回答这个问题。我没有对这个问题投反对票,但我觉得没有特别需要对它投赞成票。在您提出下一个问题之前,也许需要进行更多研究。一个很好的 StackOverflow 问题的规则 #1 是先做你自己的研究。
  • 谢谢。所以我的疑问现在很清楚了(gmdate() 函数是否在不同的地方同时返回-> 是的,它同时返回。)
猜你喜欢
  • 1970-01-01
  • 2010-09-18
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多