【问题标题】:How to display local time with PHP如何使用 PHP 显示当地时间
【发布时间】:2009-09-23 16:06:10
【问题描述】:

我们的服务器设置为格林威治标准时间,因此在春季和秋季,小时不会一直跳来跳去。但是,在夏季,所有时间都显示一个小时,这很烦人。

如何获取和显示时间,同时考虑 PHP 中的本地时区(尤其是当服务器认为本地时区是 GMT 时)。

或者,我如何知道某个地区目前是否使用“夏令时”?

或者,如何显示 GMT 时间戳或不同的时区?

【问题讨论】:

  • 当你说本地:本地给谁?服务器?每个用户?只有你吗?
  • 用户本地(对所有用户都一样,但与服务器所在的区域不同)
  • 为避免混淆,这里夏令时与夏令时相同。

标签: php timezone


【解决方案1】:

其实我想我可能已经找到了我需要的答案……

date_default_timezone_set()
// Sets the default timezone used by all date/time functions in a script 

PHP 手册在这里:- http://us2.php.net/manual/en/function.date-default-timezone-set.php

【讨论】:

    【解决方案2】:

    您可以在 PHP 中添加这一行:

    putenv("TZ=US/Eastern");
    

    随后每次调用 time()/date() 都会为您提供您所在时区的时间。

    List of time zones

    此代码将显示东部时区(美国)的当前时间:

    putenv("TZ=US/Eastern");
    date("h:i:s")
    

    【讨论】:

      【解决方案3】:

      你可以使用date函数来偏移GMT

      【讨论】:

      • 你可以吗?你怎么做到这一点?您可以使用它来了解夏令时是否开启,或者时区是什么,但我看不到如何使用此功能调整时区...
      • 你应该添加一些关于如何使用你的解决方案的示例,它会改善你的答案。
      【解决方案4】:

      显示当地时间的最简单方法是使用 JavaScript:

      <?php
      
      // Get unix time from database
      $seconds = .....;
      
      ?>
      <html>
        <head>
          <script type="text/javascript">
              function showLocalTime()
              {
                  var seconds = <?=$seconds;?>;
                  var date = new Date(seconds*1000);
                  var hours = date.getHours();
                  var minutes = "0" + date.getMinutes();
                  var seconds = "0" + date.getSeconds();
                  var formattedTime = hours + ':' + minutes.substr(minutes.length-2) + ':' + seconds.substr(seconds.length-2);
      
                  document.getElementById("local_time").innerHTML = "Local Time: " + formattedTime;
              }
        </script>
      
        </head>
      
        <body onload="showLocalTime()">
          <h2 id="local_time"> Local Time: </h2>
        </body>
      
      </html>
      

      【讨论】:

      • 你假设 JavaScript 是可用的,并且它是需要的。
      【解决方案5】:

      获取日期/时间并首先检查月份(如果它是 DATETIME 字段,则以破折号分隔)是“夏季月份”,还是会导致时间延迟一小时的月份。

      如果是这样,请将其转换为 unix 时间戳。然后,将 60 * 60(60 分钟)添加(或减去,无论结果如何)并转换为人类可读的格式。

      问题解决了!

      【讨论】:

      • 夏令时不会在月份边界上打开和关闭。您可能知道“夏令时”,即“夏令时”。
      • 这里有内置函数!破解你自己的夏令时(这是一个令人讨厌的破解)是事情被打破的方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多