MySQL和PHP使用用户时区


MySQL and PHP working with user timezones

我在MySQL DATETIME字段中存储UTC时区的时间。我想将所有这些(当在PHP中使用它们时)转换为用户定义的时区。我知道我可以用phpDateTime::setTimezone来做这件事,但这需要为它们中的每一个都做。

是否有一些全局方法可以告诉php mysql中的所有日期时间都是UTC,并将其自动转换为用户时区?

将它们存储到数据库中时,将表列存储为unix时间戳。这些都是UTC。然后只需应用用户指定的任何偏移即可。

这里有一个有趣的StackOverflow问题,它可能会帮助你

您还可以使用MySQL Unix_Timestamp函数,通过在进行比较时生成正确的int来轻松查询数据。

编辑:如果您确信每次使用数据库时都要转换数据库中的所有日期时间,只需编写一个简单的函数,获取日期时间并为用户添加正确的偏移量,然后每次从数据库中提取日期时间时只需调用该函数。就像下面的代码:

<?php
    // Assuming that $_SESSION['UserOffset'] is storing the user's timezone eg
    // $_SESSION['UserOffset'] = new DateTimeZone("Europe/Prague");
    function convert_time_zone($timeFromDatabase_time)
    {
        $userTime = new DateTime($timeFromDatabase, new DateTimeZone('UTC'));
        $userTime->setTimezone(new DateTimeZone($_SESSION['UserOffset']));
        return $userTime->format('Y-m-d H:i:s');
        // or return $userTime; // if you want to return a DateTime object.
    }

?>