【问题标题】:PHP: How to return local time from databasePHP:如何从数据库返回本地时间
【发布时间】:2012-04-13 15:48:40
【问题描述】:

我将日期以 DATETIME 类型存储在我的数据库中,如下所示:Y-m-d H:i:s

我想要实现的是在用户本地时间从数据库中返回日期。例如,如果用户在法国,我将返回他的时区。是否可以在不存储用户时区的情况下实现这一点?或者如果有其他可能,并且需要更改数据库中的存储格式,那么我可以这样做。但是,我试图在不存储用户时区的情况下实现这一目标。

【问题讨论】:

    标签: php date time timezone


    【解决方案1】:

    在数据库中以 UTC 格式存储时间,然后在您的应用程序中进行时区本地化。不过,您需要知道用户的时区。

    【讨论】:

    • ...并考虑夏令时。
    • @EdHeal:没错。如果您在 JS 中使用 getTimezoneOffset() 方法向服务器报告,我相信 DST 已经计入偏移量。
    • 它确实假设机器的时钟设置正确!公共机器(像这台机器)提前了 3 小时 22 分钟!
    • @EdHeal:当然,但我不确定是否有更准确的方法不提示用户手动输入(如果这是用于网络应用程序,那可能更可取,因为你可以保存在用户的偏好中)。
    【解决方案2】:

    嗯,在不询问用户他们的时区的情况下,我能想到的唯一方法是:

    <p>The time is: <span id="time" data="<?php echo strtotime($time_from_db); ?>"></span></p>
    <script type="text/javascript">
        (function () {
            var t = document.getElementById('time'), d = new Date();
            d.setTime(t.getAttribute("data"));
            t.innerHTML = d;
        })();
    </script>
    

    这会将日期时间作为时间戳传递,然后 JS 将区域设置(包括时区)应用到该时间戳。

    【讨论】:

    • 您是否建议将数据库中的时间存储为时间戳?
    • 我喜欢使用时间戳,但它实际上并没有任何区别,除非您将值输入为数字而不是格式化日期。
    【解决方案3】:

    如果您将日期存储在 GMT 中,那么您可以按照他们的时区将它们呈现给用户。

    编辑:

     date_default_timezone_set('UTC');
     $today = getdate();
     print_r($today);
    

    检查这个:php convert datetime to UTC 这个:Convert UTC dates to local time in PHP 还有这个:http://www.php.net/manual/en/function.gmdate.php

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 2011-07-20
      • 1970-01-01
      相关资源
      最近更新 更多