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



通常这个问题有相反的意义。但是,我遇到了一个问题,尽管更改了默认时区,但不知何故mktime() PHP 中的函数总是给我带来 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 />'."rn";
    
    date_default_timezone_set('UTC');
    $script_tz = date_default_timezone_get();
    echo $script_tz.'<br>';
    $utc_now = mktime();
    echo $utc_now.'<br />'."rn";
    ?>
 </div>
</body>
</html>

我收到这个:

5.3.28<br>
America/Los_Angeles<br>
1556333103<br>
UTC<br>
1556333103<br>

结果。正如您在不同时区中看到相同的值一样。您可以确保它遵循带有该 html 代码的页面

我只是在尝试获得不同结果时失去了希望。请帮我一把,告诉我我做错了什么?在哪里挖掘以找到原因?

时间戳不受时区的影响(它们只是自 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 />'."rn";
echo date('Y-m-d H:i:s', $user_now).'<br />'."rn";
date_default_timezone_set('UTC');
$script_tz = date_default_timezone_get();
echo $script_tz.'<br>';
$utc_now = time();
echo $utc_now.'<br />'."rn";
echo date('Y-m-d H:i:s', $utc_now).'<br />'."rn";

输出:

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不推荐使用没有参数的参数,则应改用time

3v4l.org 演示

最新更新