【问题标题】:UTC time to time based by timezone offset基于时区偏移的 UTC 时间
【发布时间】:2013-01-30 21:06:16
【问题描述】:

我将所有时间保存在 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 时间的任何更好的解决方案...?

谢谢


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

【问题讨论】:

  • 你有用户的时区存储在 MySQL 中吗?如果是这样,在您的查询中转换会更容易。
  • 我想在+3.5 时区显示像2013-01-30 21:06:29 这样的UTC 时间,这怎么可能?
  • 你能先回答我的问题吗?
  • 是的,我在数据库中有它,它也可以作为会话使用。

标签: php datetime


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 2011-12-25
    • 1970-01-01
    • 2016-08-24
    • 2016-09-05
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多