mktime在不同的时区中返回相同的值PHP

时间:2019-04-27 02:51:40

标签: php timezone mktime

通常,这个问题具有相反的含义。但是,我遇到了一个问题,尽管更改了默认时区,但PHP中的mktime()函数总是带给我UTC时间戳。换句话说,有一个简单的页面:

<!DOCTYPE html>
<html>
<body>
<div>
    <?php
    echo phpversion().'<br />';
    date_default_timezone_set('America/Los_Angeles');
    $script_tz = date_default_timezone_get();
    echo $script_tz.'<br>';
    $user_now = mktime();
    echo $user_now.'<br />'."\r\n";

    date_default_timezone_set('UTC');
    $script_tz = date_default_timezone_get();
    echo $script_tz.'<br>';
    $utc_now = mktime();
    echo $utc_now.'<br />'."\r\n";
    ?>
 </div>
</body>
</html>

我收到这个:

5.3.28<br>
America/Los_Angeles<br>
1556333103<br>
UTC<br>
1556333103<br>
结果为

。如您所见,在不同的时区使用相同的值。 您可以按照page with that html code

确定

我只是对希望获得不同结果的希望失去了希望。拜托,帮帮我,告诉我我做错了什么?在哪里寻找原因?

1 个答案:

答案 0 :(得分:2)

时间戳不受时区影响(它们只是unix纪元以来的秒数,与您的时区无关,都是相同的),因此mktime会在同一时间返回相同的值。但是,当您显示该值时(例如使用date),您会看到与两个时区的不同之处:

date_default_timezone_set('America/Los_Angeles');
$script_tz = date_default_timezone_get();
echo $script_tz.'<br>';
$user_now = time();
echo $user_now.'<br />'."\r\n";
echo date('Y-m-d H:i:s', $user_now).'<br />'."\r\n";

date_default_timezone_set('UTC');
$script_tz = date_default_timezone_get();
echo $script_tz.'<br>';
$utc_now = time();
echo $utc_now.'<br />'."\r\n";
echo date('Y-m-d H:i:s', $utc_now).'<br />'."\r\n";

输出:

America/Los_Angeles<br>1556334114<br /> 2019-04-26 20:01:54<br />
UTC<br>1556334114<br /> 2019-04-27 03:01:54<br />

请注意,mktime with no arguments has been deprecated应该只使用time

Demo on 3v4l.org