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


PHP, MySQL - How to display correct time of posted artical depends of client timezone

我在PHP和MySQL的一些网站(新闻门户)工作。我有一个标题的最后一个帖子的时间,当新闻发布。我的时区和服务器时区是GMT+2。我想从所有时区正确地显示时间给所有客户端。例如,如果新闻发布在13:05,在我的时区为GMT+3的客户端显示14:05,为GMT+4的客户端显示15:05,为GMT+1显示12:05,以此类推。怎么做呢?解决方案是什么?在MySQL数据库中存储日期和时间的最佳方法是什么?我也在我的网站上整合了碳,但我找不到方法。

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

  • 保持时间戳。
  • 存储所有客户端的时区。
  • 与数据库建立连接后运行如下查询:

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

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

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

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

date_default_timezone_set('UTC');

然后在显示值时使用任何timezone 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');