我在谷歌日历中的默认时区是(格林威治标准时间-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所以我应该用哪种功能来获得正确的时间...... ????
答案 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
这正是您想要获得的价值。