【问题标题】:List all timestamps from each timezone列出每个时区的所有时间戳
【发布时间】:2020-04-19 15:31:13
【问题描述】:

如何列出每个时区的每个时间戳。我尝试了以下代码:

$timezones = DateTimeZone::listIdentifiers();

foreach ($timezones as $timezone) {
  $dt = new DateTime();
  $dt->setTimezone(new DateTimeZone($timezone));
  echo $dt->getTimestamp() . '<br />';
}

现在每个循环都输出相同的时间戳。

【问题讨论】:

  • 当然可以。 Unix 时间与时区无关。这就是 Unix 时间戳的全部意义。
  • 这个好像之前被问过很多次了,这里有一个关于unix时间戳的长线程:stackoverflow.com/questions/23062515/…

标签: php loops timestamp timezone


【解决方案1】:

当然,Unix 时间戳与时区无关。这实际上是 Unix 时间戳的主要优点之一。他们完全忽略时区:)

要查看影响此处日期的不同时区,您必须实际查看格式化日期,而不是 Unix 时间戳。

$timezones = DateTimeZone::listIdentifiers();

foreach ($timezones as $timezone) {
  $dt = new DateTime();
  $dt->setTimezone(new DateTimeZone($timezone));
  echo $dt->format("Y-m-d H:i:s") . '<br />';
}

【讨论】:

  • Nitpick:Unix 时间戳不会忽略时区,它们始终是 UTC
  • 即他们忽略时区:)您必须在上下文中阅读。 "Unix 时间戳与时区无关" ...因此,DateTime 对象在为您提供时间戳时必然会忽略 DateTimezone,因为它始终是 UTC,因此不需要它。
  • 技术上,UTC 不是一个时区,而是一个计时系统。但是,在实践中,始终存在一个标记为 UTC 的时区对象或设置。因此,取决于你如何看待问题,你们都是正确的。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 2014-01-24
  • 2016-11-28
  • 2021-02-08
  • 2019-11-20
  • 2019-11-08
相关资源
最近更新 更多