根据论坛网站上的时区处理日期和时间

时间:2017-09-15 17:31:29

标签: php mysql datetime

我正在创建一个问答网站。但是我在处理日期/时间问题时遇到问题。 假设有两个用户 - USER1和USER2。 USER1在印度,而USER2在美国。现在,当USER1发布问题时,我将该问题存储在数据库中,时间戳为CURRENT TIMESTAMP。此问题现在将显示在公共仪表板页面中。现在,同时(比如2分钟后),在美国的USER2需要在他的时区看到问题。也就是说,他需要看到问题是在2分钟前发布的。我们如何在我的PHP代码中实现它。我使用Mysql服务器作为数据库。

当用户发布问题时,是否有必要将用户的时区存储在数据库中,以便需要计算其他用户的相对时间?如果是这样,我们如何在mysql数据库中存储时间戳和时区?

3 个答案:

答案 0 :(得分:1)

虽然MySQL会在您当前的时区(或更具体地说是服务器的时区)中显示时间戳,但它们会存储在通用UTC时区中。

当用户在论坛上创建帐户时,他们应该选择所需的时区。 (您也可以从浏览器中自动检测它。)

然后,每次PHP脚本建立数据库连接后,您都将运行查询," SET time_zone =?" "?"将是您在个人资料中保存的时区。

之后,他们通过该连接进行的每个查询都会自动将UTC时间戳转换为他们的时区,您应该能够直接向用户显示结果。

MySQL timezone reference

答案 1 :(得分:0)

自行设置页面的默认时区,以便所有用户都可以使用您在此处设置的时区。 E.g

<?php date_default_timezone_set("Africa/Lagos"); ?>

答案 2 :(得分:0)

很简单。不要将时间戳直接存储到用户时区。

无论用户所在的时区如何转换为您的php默认时区并将其存储到数据库

如果来自印度的user1,将其转换为您的php时区保存邮件发布时间,同时显示给user2将时间戳从您的php时区转换为user2时区并显示数据。它会给出正确的值

确保您的php和MySQL时区相同。

For example 
User 1 from IST
User 2 from UTC

Your php and MySQL time zone is PsT


If user1 post msg u convert IST to PST store to your db.
If user2 post msg u convert UTC to PST
store to it db.

While showing post to user1
U should convert PST to IST 
for user2 Convert PST to UTC


USE MYSQL FUNCTION convert_tz 


IN PHP to show ago follow below method

function time_elapsed_string($datetime, $full = false) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
        'y' => 'year',
        'm' => 'month',
        'w' => 'week',
        'd' => 'day',
        'h' => 'hour',
        'i' => 'minute',
        's' => 'second',
    );
    foreach ($string as $k => &$v) {
        if ($diff->$k) {
            $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
        } else {
            unset($string[$k]);
        }
    }

    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(', ', $string) . ' ago' : 'just now';
}

使用http://ipinfodb.com/ip_location_api.php

获取用户时区

或通过Java脚本

get user timezone