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

时间:2011-12-23 21:57:09

标签: php ubuntu timezone

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

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

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

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

2 个答案:

答案 0 :(得分:4)

在安德烈·克努普的回答中,我能够解决这个问题。

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有时选择我不想要的那个...你可以询问日期偏移有多大,这可以用来进一步匹配正确的时区:

$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);

答案 1 :(得分:2)