我在UTC(0)中一直在MySQL中保存,所以我可以在以后显示不同时区用户的时间时更改它们,为了保存到db,我使用:
function get_utc(){
date_default_timezone_set('UTC');
return date("Y-m-d H:i:s");
}
$now = get_utc();
Run Code Online (Sandbox Code Playgroud)
现在我想将这些时间转换为基于时区偏移量的不同时区,我正在使用此函数:
function utc_and_timezone($utc_time, $offset) {
return date("Y-m-d H:i:s", strtotime($offset, strtotime($utc_time)));
}
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果UTC时间是:2013-01-30 21:06:29在那个时间应用+5时区很容易找到:
$new_time = utc_and_timezone("2013-01-30 21:06:29", "+5 hours"); // Works Fine
Run Code Online (Sandbox Code Playgroud)
它可以很好地使用像5,6或其他整数的偏移,但与其他一些像+3.5,+ 2.5这不起作用:
$new_time = utc_and_timezone("2013-01-30 21:06:29", "+5.5 hours"); // NOT WORKING
Run Code Online (Sandbox Code Playgroud)
谁知道为什么?!在不同的时区进行UTC时间的任何更好的解决方案......?
谢谢
简短的问题:
我想显示UTC时间像2013-01-30 21:06:29在+3.5时区,这怎么可能?
在PHP方面,您可以尝试:
$utc_time = '2013-01-30 21:06:29';
$offset = '3.5';
echo date("Y-m-d H:i:s", strtotime($utc_time) + (3600 * $offset) );
//Returns 2013-01-31 00:36:29
$utc_time = '2013-01-30 21:06:29';
$offset = '-5.5';
echo date("Y-m-d H:i:s", strtotime($utc_time) + (3600 * $offset) );
//Returns 2013-01-30 15:36:29
Run Code Online (Sandbox Code Playgroud)
在MySQL方面,你可以使用CONVERT_TZ:
SELECT CONVERT_TZ('2013-01-30 21:06:29','+00:00','+03:30');
//Returns January, 31 2013 00:56:29+0000
SELECT CONVERT_TZ('2013-01-30 21:06:29','+00:00','-05:50');
//Returns January, 30 2013 15:16:29+0000
Run Code Online (Sandbox Code Playgroud)