php中的时区转换

时间:2011-05-05 11:01:12

标签: php timezone icalendar

我在谷歌日历中的默认时区是(格林威治标准时间-08:00)太平洋时间。现在我生成会议请求并邀请两个人。
1)一个人在他的日历中的默认时区是(GMT + 05:30)太平洋时间,他的电子邮件是通过微软交换服务器来的。
2)第二个我邀请一个人在gmail帐户上默认时区为(GMT + 05:30)。我看到的ics文件有DTSTART作为DTSTART:20110506T170000Z它就像是你的yyyymmdd T hhmmss所以这里的时间恰到好处。
但是第一个查看microsoft的人得到DTSTART:20110506T070000Z所以这里我的问题是如何转换时区以便两者都相同......

date_default_timezone_set($timezonename[0]->timzone_val); 
$meetingstamp = strtotime($meeting_date." ".$timezonename[0]->timzone_val);
$dtstart= gmdate("Ymd\This\Z",$meetingstamp);
$dtend= gmdate("Ymd\This\Z",$meetingstamp+$meeting_duration);
$todaystamp = gmdate("Ymd\This\Z");

这里我的timzone来自America / Los_Angeles所以我应该用哪种功能来获得正确的时间...... ????

1 个答案:

答案 0 :(得分:1)

$start = new DateTime($meeting_date, new DateTimeZone($timezonename[0]->timzone_val);
$start->setTimezone(new DateTimeZone('UTC'));
$end   = clone $start;
$end->modify(sprintf('+ %d seconds', $meeting_duration));

echo $start->format('Ymd\THis\Z');
echo $end->format('Ymd\THis\Z');

顺便说一句,它应该是日期格式化字符串中的大写H,因为小写h代表我们的12-hout格式。 < / p> 上次评论后

编辑

$start = new DateTime('2011-05-07 10:00', new DateTimeZone('PDT'));
$start->setTimezone(new DateTimeZone('UTC'));
$end   = clone $start;
$end->modify(sprintf('+ %d seconds', 1*60*60));

echo $start->format('Ymd\THis\Z');
echo "\n";
echo $end->format('Ymd\THis\Z');

结果

20110507T170000Z
20110507T180000Z

这正是您想要获得的价值。