11

以下脚本在我调用后返回错误的时间date_default_timezone_set("UTC")

<?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。所以应该发生的是,对“日期”的第二次调用应该返回第一次调用后 1 小时的时间。它实际上比第一个晚了 5 个小时。

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

我不知道这是 PHP 问题还是服务器问题。

4

3 回答 3

8

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

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

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

于 2012-04-13T11:24:03.353 回答
3

只需使用以下代码设置您的区域

   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

支持的时区列表 http://www.php.net/manual/en/timezones.php

于 2016-12-14T05:48:02.063 回答
2

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

于 2015-06-18T01:28:39.333 回答