【问题标题】:Will the unix timestamp always be the same in php and MySQL?php 和 MySQL 中的 unix 时间戳是否总是相同的?
【发布时间】:2016-04-20 20:10:55
【问题描述】:

PHP 有time(),MySQL 有UNIX_TIMESTAMP()

在给定的机器上这些总是相等的吗?

我希望答案通常是肯定的,但是否有任何极端情况?

【问题讨论】:

  • @JayBlanchard DST 不会有任何影响。
  • 啊,我的错误@ceejayoz - 只是闪回到 PHP 中的时区设置,而 MySQL 中没有。
  • @JayBlanchard 啊,现在可以变得有趣了。 :-p UNIX_TIMESTAMP(field)fieldDATETIME 时会变得多毛。我们存储为日期/时间TIMESTAMP 而不是DATETIME,并使用carbon.nesbot.com/docs 进行PHP 操作。

标签: php mysql


【解决方案1】:

它们在同一台机器上总是相同的。

请注意,将 MySQL 托管在第二台机器上是很常见的,这会带来细微差异的可能性(在正常操作中,从查询返回到进行查询的机器时的网络延迟等问题)以及可能更大的差异(如果一个/两个服务器在本地的时间不正确)。

【讨论】:

  • 即使 MySQL 位于具有不同时区的不同机器上,UNIX 时间戳不应该提供与 UTC 00:00:00 相同的值吗?我认为唯一可能的时间差异是执行流程的时间。
  • @Quantastical 是的,它应该提供相同的值。世界上的每个时区在任何特定时刻都有完全相同的 UNIX 时间戳。也就是说,如果您与 MySQL 服务器的连接有点慢或类似的情况,我所说的“微小差异”是 1-2 秒。
  • @Quantastical,“服务器在本地的时间可能不正确”,特别是如果他们不通过 ntp 更正时间。在这种情况下,两个不同的服务器同时返回两个不同的时间戳。
  • @Quantastic 没错。调用UNIX_TIMESTAMP()time() 会查询服务器的系统时钟。如果该系统时钟不正确,则生成的时间戳也同样不正确。 NTP 是一项服务,它会不断咨询世界各地的时间服务器以保持系统时钟准确。
  • @ceejayoz 完美,谢谢。那是我不确定的部分,该函数调用是否 ping 了一些外部资源或根据系统时钟计算它。我同意你的回答 :) 再次感谢你花时间帮助我。
【解决方案2】:

是的,它们将始终表示相同的时间,加上或减去执行彼此所需时间的任何差异。

这是因为 time()UNIX_TIMESTAMP() 都返回自 Unix 纪元以来的秒数,而 Unix 纪元是 UTC,这在设计上与 time zones and daylight savings time 无关。

还应注意,如果您使用的是要转换为 unix 时间戳的特定日期,则时区会有所不同。

【讨论】:

  • @Quantastical 你误读了我的答案。我注意到在不同的机器上你可能会因为时间延迟、不使用 NTP 等而看到差异。时区与它无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
相关资源
最近更新 更多