【问题标题】:PHP How to adjust availability timezonesPHP 如何调整可用性时区
【发布时间】:2012-12-07 19:26:09
【问题描述】:

当用户注册我的网站时,他们会以这种格式输入他们每周的可用性:

星期一 1300 到 1400 周一 2100 至 2200

星期二 1200 到 1300 周二 1400 至 1500

等等。

他们还根据选择菜单(例如 America/Los_Angeles)指示他们的时区。

我希望根据访问设置了不同时区的个人资料的用户的时区来调整这些时间。最好的解决方案是什么?

【问题讨论】:

    标签: php timezone


    【解决方案1】:

    将他们的可用性存储为从 EPOCH 开始的秒数,然后根据用户的时区将其转换为适当的时间。

    【讨论】:

      【解决方案2】:

      在字段值中存储 UTC 和所选时区之间的差异

      <option value="3">UTC+3 timezone</option>
      <option value="-5">UTC-5 timezone</option>
      

      然后将其添加或减少到小时的输出。 如果这种差异提供否定结果或超过 24 小时 - 设置一周的下一天或前一天。

      我认为你真的不需要 unixtime 这样的时间间隔。

      【讨论】:

      • 这是一个坏主意,因为 DST 在不同时间对不同时区的工作方式不同。依赖这样的东西充其量是hacky,有时可能是错误的。
      • 我认为您总是知道根据当前用户的设置向当前用户显示什么,因为服务器时区设置是已知的。如果代码必须在具有不同时区的任何服务器上运行,这是另一种情况。
      【解决方案3】:

      我实际上最终这样做了:

      <?php while ($ava = mysql_fetch_array($avail_action)) { 
          date_default_timezone_set($profile_owners_timezone);
          $timestamp_from = strtotime($ava['time_from']);
          $timestamp_to = strtotime($ava['time_to']);
      
                  date_default_timezone_set($_SESSION['timezone']);
          $time_from = date("g:i A", $timestamp_from);
          $time_to = date("g:i A", $timestamp_to); ?>
      

      基本上我得到了他/她输入的个人资料“所有者”时区,将时区设置为该时区,然后将时区设置为“查看者”时区并将变量设置为该时区。

      感谢大家的帮助!

      【讨论】:

        猜你喜欢
        • 2011-04-22
        • 2023-03-25
        • 2014-04-09
        • 2013-06-29
        • 2010-11-29
        • 2013-05-19
        • 2013-07-27
        • 1970-01-01
        • 2012-07-06
        相关资源
        最近更新 更多