0

我正在使用 PHP 和 MySQL 开发一些网站(新闻门户)。当新闻发布时,我有一个最后的帖子。我的时区和服务器时区是 GMT+2。我想向所有时区的所有客户正确显示时间。例如,如果13:05在我的时区发布新闻,以显示来自GMT+3 14:05的客户、来自GMT+4zone的客户15:05、forGMT+1 12:05等。怎么做?什么是解决方案,以及为此目的在 MySQL 数据库中存储日期和时间的最佳方法是什么?我也将Carbon集成到我的网站中,但我找不到方法。

4

3 回答 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 回答