【问题标题】:Getting correct time based on timezoneid using PHP使用 PHP 根据 timezoneid 获取正确的时间
【发布时间】:2020-05-07 14:10:27
【问题描述】:

我正在尝试根据他们的“TimezoneId”使用世界上任何位置的准确当前本地时间。有时我会得到正确的 GMT 偏移量。例如:

$localTimezone = new DateTimeZone('America/Los_Angeles');
$gmtTimezone = new DateTimeZone('GMT');
$currentDateTime = new DateTime('2020-01-21 13:14', $gmtTimezone);
$offset = $localTimezone ->getOffset($currentDateTime );
echo $offset/3600;

这将返回-8,这对于今天在洛杉矶的日期是正确的。

但是,当我尝试使用 America/Sao_Paulo 作为“TimezoneId”时,我得到的 -2 目前对于该位置不正确。根据我尝试过的谷歌和其他时间应用程序,它应该是-3

我已经搜索了一个解决方案并看到了不同的尝试,这些尝试似乎对我不起作用。

感谢您的意见!

【问题讨论】:

  • 您可能需要更新您的时区数据库。圣保罗曾经遵守夏令时 (-2),但现在不再遵守。
  • @aynber 我如何更新时区数据库?我只有 timezoneids 的值而不是偏移量本身
  • 感谢您的帮助@aynber

标签: php time timezone timezone-offset


【解决方案1】:

根据timeanddate.com,巴西于 2019 年 2 月 17 日停止遵守 DST。要在您的应用程序中反映这一点,您需要一个 PHP 版本,其中包含在发布公告后更新的 IANA 时区数据库版本。我在3v4l.org 中运行了你的代码,得到了 7.3.9 - 7.4.1。

【讨论】:

  • 那么你的意思是这取决于我使用的 PHP 版本吗?
  • 不完全是。这取决于您的 PHP 安装使用的 IANA 时区数据库。通常,它将使用 PHP 创建者捆绑的版本,但我认为第三方打包程序(例如 Linux 发行版)可以包含不同的版本。
  • 感谢@Alvaro 提供的信息
猜你喜欢
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多