在PHP中使用系统的时区设置

问题描述 投票:0回答:3

所以我有一个用 PHP 编写的 Web 应用程序,它将在世界各地不同的 Ubuntu 服务器上运行。 有些服务器将配置为在本地时间运行,有些将在 UTC 运行,这取决于客户。

虽然我可以编辑 php.ini 文件并设置 date.timezone,但手动输入此类数据肯定有一天会出错。

如何让 PHP 使用系统中已定义的时区(tzdata)?

或者,换句话说:如何从 PHP 系统中提取(长)时区名称以在 date_default_timezone_set() 中使用?

php ubuntu timezone
3个回答
4
投票

在 Andrey Knupp 的回答中提供的帮助下,我能够解决这个问题。

echo "Time: " . date("Y-m-d H:i:s") . "<br>\n";

$shortName = exec('date +%Z');
echo "Short timezone:" . $shortName . "<br>";

$longName = timezone_name_from_abbr($shortName);
echo "Long timezone:" . $longName . "<br>";

date_default_timezone_set($longName);
echo "Time: " . date("Y-m-d H:i:s") . "<br>\n";

给出输出:

Time: 2011-12-23 23:29:45
Short timezone:MYT
Long timezone:Asia/Kuala_Lumpur
Time: 2011-12-24 06:29:45

更新:时区的简称不是唯一的。例如,在美国和澳大利亚都有一个“EST”,导致 timezone_name_from_abbr 有时会选择我不想要的那个...您可以询问 date 偏移量有多大,这可以用于进一步匹配正确时区:

$offset = exec('date +%::z');
$off = explode (":", $offset);
$offsetSeconds = $off[0][0] . abs($off[0])*3600 + $off[1]*60 + $off[2];
$longName = @timezone_name_from_abbr($shortName, $offsetSeconds);


0
投票

我最近使用过几次,但我不知道它适用于哪些 Linux 发行版:

date_default_timezone_set(trim(file_get_contents('/etc/timezone')));

也许

timedatectl
更可预测:

$ timedatectl show --property=Timezone
Timezone=Europe/Amsterdam

所以这也很简单:

date_default_timezone_set(trim(substr(`timedatectl show --property=Timezone`, 9)));
© www.soinside.com 2019 - 2024. All rights reserved.