PHP,MySQL - 如何显示发布的artical的正确时间取决于客户端时区

时间:2015-09-06 10:18:39

标签: php mysql timezone php-carbon

我在PHP和MySQL的某个网站(新闻门户网站)上工作。我发布了一篇专栏文章。我的时区和服务器时区是GMT + 2。我想正确地向所有时区的所有客户显示时间。例如,如果新闻在我的时区13:05处发布,则为来自GMT+3 14:05的客户显示来自GMT+4区域15:05的客户的{{1} }} GMT+1,等等。怎么做?什么是解决方案以及为此目的在MySQL数据库中存储日期和时间的最佳方法是什么?我也将Carbon整合到我的网站中,但我找不到方法。

3 个答案:

答案 0 :(得分:0)

我们在公司所做的是我们一直存储在GMT中。即使我们在南非。然后根据用户的位置,我们将时间转换为正确显示。有许多方法可以确定用户所在的位置并转换时间,但最简单的方法是询问他们居住的位置并存储该信息。

答案 1 :(得分:0)

  • 将日期保留在时间戳中。
  • 为所有客户存储时区。
  • 建立与数据库运行查询的连接之后:

    SET @@session.time_zone = "+02:00";

    SET @@session.time_zone = "Europe/Warsaw";

    其中时区偏移或名称是为客户存储的值。

  • 所有时间戳值都将从定义的时区中的查询返回。

答案 2 :(得分:0)

以UTC时区存储值在db存储区中,如下所示

date_default_timezone_set('UTC');

然后在显示值时使用任何时区js获取用户时区并使用ajax将时区发送到服务器并将其存储在SESSION变量中,并在显示日期时添加该时区。 例如 1)从https://bitbucket.org/pellepim/jstimezonedetect/src

下载时区js

以下将为您提供时区

var tz = jstz.determine(); // Determines the time zone of the browser client
var timezone=tz.name(); // Returns the name of the time zone eg "Europe/Berlin"

如下所示进行ajax调用

$ .post(“scripts / set_timezone.php”,{timezone:timezone});

并且在set_timezone.php中有代码

session_start();
$_SESSION['user_timezone'] = $_POST['timezone'];

并显示如下显示

$date = new DateTime('2012-01-23 05:00:00', new DateTimeZone('UTC'));
$date->setTimezone(new DateTimeZone($_SESSION['user_timezone']));//This will from the session e.g Asia/Kolkata
$time= $date->format('Y-m-d H:i:s');