我正在使用 PHP 和 MySQL 开发一些网站(新闻门户)。当新闻发布时,我有一个最后的帖子。我的时区和服务器时区是 GMT+2。我想向所有时区的所有客户正确显示时间。例如,如果13:05
在我的时区发布新闻,以显示来自GMT+3
14:05
的客户、来自GMT+4
zone的客户15:05
、forGMT+1
12:05
等。怎么做?什么是解决方案,以及为此目的在 MySQL 数据库中存储日期和时间的最佳方法是什么?我也将Carbon集成到我的网站中,但我找不到方法。
问问题
192 次
3 回答
0
- 将日期保留在时间戳中。
- 为所有客户端存储时区。
建立与数据库的连接后,像这样运行查询:
SET @@session.time_zone = "+02:00";
或者
SET @@session.time_zone = "Europe/Warsaw";
其中时区偏移量或名称是为客户端存储的值。
所有时间戳值都将从定义时区的查询中返回。
于 2015-09-06T11:03:23.073 回答
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');
于 2015-09-06T12:23:37.660 回答
0
我们在公司所做的就是始终将时间存储在 GMT 中。尽管我们在南非。然后根据用户的位置我们将时间转换为正确显示。有很多方法可以确定用户的位置并转换时间,但最简单的方法是询问他们住在哪里并存储该信息。
于 2015-09-06T10:28:10.623 回答