【问题标题】:adjust time zone调整时区
【发布时间】:2011-02-01 06:03:59
【问题描述】:

如何获取存储的日期,例如 2011-01-30 18:23:49,并将其调整为任何选择的时区?是否有一种简单的方法,例如通过缩写或添加/减去 x 小时数来简单地定义时区? 基本上我希望用户能够选择他们的时区,并调整这个默认日期以适应他们的时间。

【问题讨论】:

标签: php datetime date


【解决方案1】:
  1. 让用户选择他们的时区

  2. 使用该区域名称或偏移量与date_default_timezone_set 设置在脚本执行的其余部分中日期函数中使用的默认时区。

  3. 使用date('Z') 以秒为单位获取该时区与GMT 的偏移量

  4. 将您存储的日期转换为带有strtotime 的时间戳——UNIX 时间戳始终为格林威治标准时间,因此您现在可以使用格林威治标准时间。

  5. 添加第 3 步的偏移量以将该时间转换为用户的时区。

  6. 再次使用date 将时间戳格式化为所需显示格式的字符串。

例子:

$user_timezone = 'America/Los_Angeles';
$stored_time = '2011-01-30 18:23:49';

date_default_timezone_set($user_timezone);
$timestamp = strtotime($stored_time);
$local_timestamp = $timestamp + date('Z');
$local_date = date('Y-m-d H:i:s', $local_timestamp);

echo $local_date;

【讨论】:

    【解决方案2】:

    我的解决方案来了。我用 America/Los_Angeles 作为服务器时区,我的时区作为用户对其进行了测试。我假设时间是使用服务器时区存储的。

    <?php
    // My (user) timezone
    $user_timezone = 'Europe/Berlin';
    
    // Server timezone
    $stored_timezone = 'America/Los_Angeles';
    
    // Date/Time stored in your DB, using timezone of the server (yours, that is)
    $stored_datetime = '2011-01-29 22:40:00'; // this is the current time in L.A.
    
    // Setting default to servers timezone if not done before
    date_default_timezone_set($stored_timezone);
    
    // converting to unix timestamp
    $stored_timestamp = strtotime($stored_datetime);
    
    // setting default to users timezone
    date_default_timezone_set($user_timezone);
    
    // converting to timestamp
    $user_datetime = date('Y-m-d H:i:s', $stored_timestamp);
    
    // setting default back to servers timezone
    date_default_timezone_set($stored_timezone);
    
    echo $user_datetime; // output is my current time
    

    【讨论】:

      猜你喜欢
      • 2011-04-22
      • 2012-07-06
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 2014-02-10
      • 1970-01-01
      相关资源
      最近更新 更多