2015-09-06 68 views
0

我正在一些网站(新闻门户网站)在PHP和MySQL。当有新闻发布时,我有最后一篇文章。我的时区和服务器时区是GMT + 2。我想从所有时区向所有客户正确显示时间。例如,如果消息被张贴在13:05我的时区从GMT+314:05GMT+415:05显示,为客户,为客户,为​​12:05,等等。怎么做?什么是解决方案,以及为此目的在MySQL数据库中存储日期和时间的最佳方式是什么?我也在我的网站中整合了Carbon,但是我找不到那个方法。PHP,MySQL - 如何显示正确的时间张贴artical取决于客户端时区

+1

使用getTimezoneOffset();' – splash58

+0

我具有低使用javascript的经验。我可以用客户端PC(设备)时区的javascript获取,并将其作为字符串值(如“欧洲/布鲁塞尔”)分配给PHP变量? –

+1

不,你不能得到时区名称,因为他们中的许多人都有相同的时间转换。但是你可以通过js或者将它发送到你的服务器来改变时间和改变 – splash58

回答

0

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

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

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

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

    在哪里时区偏移或名称存储客户端的价值。

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

0

储存时像下面

date_default_timezone_set('UTC'); 

然后同时显示的值使用任何时区js和使用AJAX发送时区服务器和存储它获取用户时区的UTC时区的东西在数据库存储值在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调用,比如下面

$。员额( “脚本/ set_timezone.php” {timezone:timezone});

和set_timezone.php有代码

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

和同时显示显示与JS`偏移=新日期()如下

$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');