php - date_default_timezone_set无效,为什么?

时间:2017-05-26 04:50:25

标签: php timezone

date_default_timezone_set无效。

我的代码:

ini_set('display_errors', true);
error_reporting(E_ALL);

date_default_timezone_set("UTC");
echo date('Y-m-d H:i:s T') . "<br>";
echo date('Y-m-d H:i:s T', time()) . "<br>";
date_default_timezone_set("Asia/Shanghai");
echo date('Y-m-d H:i:s T') . "<br>";
echo date('Y-m-d H:i:s T', time()) . "<br>";
ini_set("date.timezone","UTC");
echo date('Y-m-d H:i:s T') . "<br>";
echo date('Y-m-d H:i:s T', time()) . "<br>";
ini_set("date.timezone","Asia/Shanghai");
echo date('Y-m-d H:i:s T') . "<br>";
echo date('Y-m-d H:i:s T', time()) . "<br>";

所有人都返回相同的日期&#34; 2017-05-26 12:47:08 CST&#34;,为什么?

更新

我已经修复了这个问题,原因是我用错误的方法更改了CentOS7上的时区:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

这种方式在CentOS6上是正确的,但在CentOS7 / etc / localtime链接到/ usr / share / zoneinfo / Etc / UTC,所以我损坏了UTC时区。

在CentOS7上更改时区的正确方法是:

timedatectl set-timezone "Asia/Shanghai"

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

所以我将/ usr / share / zoneinfo / Etc / UTC从其他系统复制到我的系统来解决这个问题。

1 个答案:

答案 0 :(得分:3)

试试这个。

<?php
    $now = new DateTime();
    $now->setTimezone(new DateTimeZone('America/Los_Angeles'));
    echo $now->format('Y-m-d H:i:s T');
?>

time()是时区独立的。这意味着,无论时区如何配置,它始终会返回自1970年1月1日以来的秒数。它总是需要UTC时间。&#39;

date_default_timezone_set(); NOT working

同时检查一下 http://php.net/manual/pl/function.time.php#100220