2017-05-26 46 views
1

date_default_timezone_set不起作用。php - 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>"; 

他们都返回相同的日期 “2017年5月26日12时47分08秒CST”,为什么呢?


更新:

我已经解决了这个问题,原因是我用了错误的方式来改变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到解决了这个问题。

回答

2

试试这个。

<?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时间。'

date_default_timezone_set(); NOT working

还要检查这个 http://php.net/manual/pl/function.time.php#100220

+0

请参见上面的代码,我也尝试 “回声日期( 'YMD H:我:■T')”,这不包括时间(),但它返回相同的结果。我也尝试:$ now = new DateTime(); $ now-> setTimezone(new DateTimeZone('UTC')); echo $ now-> format('Y-m-d H:i:s T')。 “
”;它返回:2017-05-26 13:14:27 CST,为什么时区是CST(中国)? – gdtv

+0

@gdtv但是在你回复那个日期之前,你将时区设置为UTC。所以echo date(time())将与你的echo相同,因为它们都是UTC – Andreas