2012-04-13 153 views
8

我叫date_default_timezone_set("UTC")PHP日期返回错误的时间

<?PHP 
    $timestamp = time(); 
    echo "<p>Timestamp: $timestamp</p>"; 

    // This returns the correct time 
    echo "<p>". date("Y-m-d H:i:s", $timestamp) ."</p>"; 


    echo "<p>Now I call 'date_default_timezone_set(\"UTC\")' and echo out the same timestamp.</p>"; 
    echo "Set timezone = " . date_default_timezone_set("UTC"); 

    // This returns a time 5 hours in the past 
    echo "<p>". date("Y-m-d H:i:s", $timestamp) ."</p>"; 

?> 

后的时区的服务器上下面的脚本将返回错误的时间BST。所以应该发生的情况是,第二次调用'date'应该会在第一次调用后1小时后返回。它实际上是在第一个5小时后返回的。

我应该注意到服务器最初是用EDT时区(UTC -4)设置的。这已更改为BST(UTC +1),并且服务器已重新启动。

我不明白这是PHP的问题还是服务器的问题。

+0

date_default_timezone_set("Asia/Bangkok");//set you countary name from below timezone list echo $date = date("Y-m-d H:i:s", time());//now it will show "Asia/Bangkok" or your date time 

名单什么是date_default_timezone_get()显示*之前*您更改时区? – BenOfTheNorth 2012-04-13 11:21:05

+0

时区:欧洲/伦敦 – gargantuan 2012-04-13 11:22:56

+0

什么是您的服务器的'日期'终端命令返回? – 2012-04-13 11:23:02

回答

6

这几乎肯定不是php中的错误,而是在您的本地时区配置中。

最有可能的是,您实际上没有更改系统范围的时区,而只是交互式显示的时区。检查/etc/localtime是否符合您的预期。在debian系统上,您可以运行tzselect(具有超级用户权限)来设置系统范围的时区。

设置好时区后,您可能需要重新设置时钟。在许多系统上,这应该会随着时间自动发生,但您可以通过运行ntpdate -u pool.ntp.org来手动执行。

1

你应该检查你的国家的正确时区的PHP手册。然后将其设置在date_default_timezone_set()函数中。为了澄清,我解释了在这里http://t2techblog.com/php-a-simple-function-for-getting-the-current-nigeria-local-time/

+0

也许你可以提供一个例子。 – Lance 2015-06-18 01:33:14

+0

示例:一个简单的函数,它返回我的国家(尼日利亚)的正确时间,并带有欢迎消息。 <?php function get_ng_time(){ date_default_timezone_set('Africa/Lagos'); $ time = date('h:i A'); $ message ='你好,欢迎来到我的博客。这是'。$ time'。这里在尼日利亚。'; 返回$ message; } ?> – 2015-06-18 01:50:16

+0

我真的很抱歉,函数和我的文本是挤在一起的。我在这里是新的..仍然搞清楚事情是如何工作的 – 2015-06-18 01:53:07