【问题标题】:PHP, MySQL - How to display correct time of posted artical depends of client timezonePHP,MySQL - 如何显示发布文章的正确时间取决于客户端时区
【发布时间】:2015-09-06 10:18:38
【问题描述】:

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

【问题讨论】:

  • 带js offset = new Date().getTimezoneOffset();
  • 我对 javascript 的体验很差。我可以从客户端 PC(设备)时区获取 javascript,并将其作为字符串值分配给 PHP 变量,例如“Europe/Brussels”吗?
  • 不,您无法获取时区名称,因为它们中的许多具有相同的时移。但是您可以通过 js 或将其发送到您的服务器来获得该时间转移和更改

标签: php mysql timezone php-carbon


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    • 在时间戳中保留日期。
    • 为所有客户端存储时区。
    • 在建立与数据库的连接后,像这样运行查询:

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

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

      其中时区偏移量或名称是为客户端存储的值。

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

    【讨论】:

      【解决方案3】:

      在 UTC 时区的数据库中存储值时,如下所示

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

      【讨论】:

        猜你喜欢
        • 2014-09-12
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2012-12-21
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        • 2017-12-26
        相关资源
        最近更新 更多