【问题标题】:I'm trying to get timezone name using GMT value我正在尝试使用 GMT 值获取时区名称
【发布时间】:2018-10-02 13:12:13
【问题描述】:

我在数据库表中创建了 unix 时间戳。我知道用户的时区,它也保存在表格中,格式为 "GMT+04:00" , "GMT+05:30"

我要做的是获取时间戳并根据用户的时区向用户显示可读时间。

例如

$startTime = '1524391500';

echo date('h:ia', $startTime) . '<br>';
date_default_timezone_set('America/Fortaleza');
echo date('h:ia', $startTime) . '<br>';

这会给我们结果

10:05am
07:05am

问题是 date_default_timezone_set 不接受这个时区

date_default_timezone_set('GMT+05:30');

所以我需要一种将“GMT+05:30”转换为“America/Fortaleza”之类的方法

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 如果您需要将其显示为名称,最好将用户的时区保存为America/Fortaleza-like 格式。如您所知 - 时区名称与其偏移量之间并不总是 1:1 的关系。例如,您的 America/FortalezaAmerica/CordobaAntarctica/Rothera(以及更多)具有相同的偏移 (UTC−03:00)
  • @Smuuf 是的,数据库已经创建,数据由其他开发人员保存。我必须使用它。我认为如果我们能得到至少一个匹配的时区就足够了,因为我不需要确切的时区,只需要显示正确的时间。

标签: php datetime timezone timestamp unix-timestamp


【解决方案1】:

你所要求的是不可能的。时区和时区偏移是两个不同的东西。

考虑像America/Sao_Paulo 这样的单一时区。它在标准时间使用-03:00 的偏移量,在夏令时使用-02:00 的偏移量。

现在考虑您提到的America/Fortaleza 在整个一年中使用-03:00

如您所见,对于给定的时区,我可能有多个偏移量,而对于给定的偏移量,我可能有多个时区。如果您想为自己找到更多示例,可以review the lists of time zones and their offsets

这在其他答案以及the timezone tag wiki 的“时区!= 偏移量”部分中得到了广泛的介绍。

【讨论】:

  • 非常感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 2019-02-20
  • 2013-08-17
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多