我如何处理存储日期,例如2011-01-30 18:23:49,并将其调整为任何选定的时区?是否有一种简单的方法,例如简单地通过缩写定义时区或添加/减去x小时数? 基本上我希望用户能够选择他们的时区,并调整这个默认日期以适应他们的时间。
答案 0 :(得分:7)
让用户选择他们的时区
将该区域名称或偏移量与date_default_timezone_set
一起使用,以设置在其余脚本执行过程中日期函数中使用的默认时区。
使用date('Z')
以秒为单位从GMT获取该时区的偏移量
使用strtotime
将存储日期转换为时间戳 - UNIX时间戳始终为GMT,因此您现在可以使用GMT。
添加步骤3中的偏移量,将该时间转换为用户的时区。
再次使用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;
答案 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