UTC时间基于时区偏移量

beh*_*z4d 1 php datetime

我在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时区,这怎么可能?

Ker*_*mit 6

在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)