GMT转换问题的另一个日期时间

时间:2011-06-22 06:49:02

标签: php datetime timezone

我正在从Google日历中提取Feed。它具有以下格式的事件开始时间:

StartDate: 2011-06-25T18:00:00.000-05:00

我知道-05:00是时区偏移量。我需要以上内容在GMT时间内放入mySQL数据库。我只是在阅读关于date()gmdate()的内容,但我担心我对此很陌生,而且我似乎没有得到我需要的结果。

现在上面的代码最终成为我在mySQL中的datetime colum中的内容:

2011-06-25 18:00:00

我需要以上内容:

2011-06-25 23:00:00

但我需要一种动态的方法来做到这一点,所以任何具有不同时区的用户都会得到正确的结果 - IE:我需要足够智能的功能来读取时区偏移并进行所需的更改而不管偏移量如何。我希望有一个PHP函数可以做到这一点吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

如果你使用strtotime,你可以这样做:

<?
date_default_timezone_set('UTC');
$date = strtotime('2011-06-25T18:00:00.000-05:00');
echo date('Y-m-d H:i:s',$date);

这导致我的系统:

2011-06-25 23:00:00

答案 1 :(得分:1)

这样的事情可能会奏效:

// get date with time zone
$date = new DateTime('2011-06-25T18:00:00.000-05:00');

// get time zone offset in minutes
$offset = $date->getOffset();

// get date without offset
$date2 = new DateTime($date->format('Y-m-d\TH:i:s'));

// apply offset to get UTC time
$date2->add(new DateInterval('PT' . $offset . 'M'));

可能它有点复杂,但我不是“PHP家伙”,所以..

答案 2 :(得分:1)

最简单的方法是使用DateTimeDateTimeZone - 这也是PHP 5.2.x兼容。

$date = new DateTime('2011-06-25T18:00:00.000-05:00');
$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:s');

此解决方案不要求您使用date.timezonedate_default_timezone_set()更改已配置的PHP时区。