1

我将所有时间保存在 UTC(0) 中的 MySQL 中,因此我可以稍后在为具有不同时区的用户显示时间时更改它们,以便保存到数据库中,我使用:

function get_utc(){
        date_default_timezone_set('UTC');
        return date("Y-m-d H:i:s"); 
    }
$now = get_utc();

现在我想根据时区偏移量将这些时间转换为不同的时区,我正在使用这个函数:

function utc_and_timezone($utc_time, $offset) {
        return date("Y-m-d H:i:s", strtotime($offset, strtotime($utc_time)));
    }

因此,例如,如果 UTC 时间是:2013-01-30 21:06:29 在该时间应用 +5 时区很容易找到:

$new_time =  utc_and_timezone("2013-01-30 21:06:29", "+5 hours"); // Works Fine

它适用于 5,6 或其他整数之类的偏移量,但对于 +3.5、+2.5 之类的其他整数则不起作用:

$new_time =  utc_and_timezone("2013-01-30 21:06:29", "+5.5 hours"); // NOT WORKING

有谁知道为什么?!在不同时区制作UTC时间的任何更好的解决方案......?

谢谢


简短的问题: 我想2013-01-30 21:06:29+3.5时区中显示 UTC 时间,这怎么可能?

4

1 回答 1

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

在 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
于 2013-01-30T21:21:16.170 回答