调整时区

时间:2011-02-01 06:03:59

标签: php datetime date

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

2 个答案:

答案 0 :(得分:7)

  1. 让用户选择他们的时区

  2. 将该区域名称或偏移量与date_default_timezone_set一起使用,以设置在其余脚本执行过程中日期函数中使用的默认时区。

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

  4. 使用strtotime将存储日期转换为时间戳 - UNIX时间戳始终为GMT,因此您现在可以使用GMT。

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

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

  7. 示例:

    $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;
    

答案 1 :(得分:0)

这是我的解决方案。我使用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