我在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');