2

我有这个日历时间:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:node-447@www.domain.com
DTSTAMP:20130426T133000Z
DTSTART:20130426T133000Z
DTEND:20130426T143000Z
SUMMARY:New Test
DESCRIPTION:  - http://www.domain.com/content/new-test
LOCATION:
END:VEVENT
END:VCALENDAR

时间和日期存储在 DTSTAMP、DTSTART 和 DTEND 中,但 Outlook 似乎并未将时区信息附加到这些日期。有没有办法做到这一点?我相信最后的 Z 指的是“祖鲁”时区,或 UTC。我在这个假设上错了吗?

如果用户在 CST,我如何让 Outlook 识别给定时间在 EST 中,并更改它?有没有办法轻松做到这一点?(我正在自动生成 iCal/vCal 文件,因此我可以直接控制此文件中的所有内容)。我正在使用 PHP 生成这个文件(技术上它是由 Drupal 模块生成的)

4

1 回答 1

1

20130426 -- 这是 YYYYMMDD 格式 133000Z - 1330 是格林威治标准时间 00Z 只是一些额外的文本

嘿,我这周刚刚在做这个,这是我用来做的代码:

// DISPLAY CALENDER EVENT
$startdate = date('Ymd',strtotime($startdate)); //needs the YYYYMMDD  format
$enddate = date('Ymd',strtotime($enddate)); //ends the day before the set date. So the date range is startdate(inclusive) -> enddate(exclusive)
$startTime = gmdate('Hi',mktime($startminutes,$startseconds)); // This is in greenwhich mean time. Have the users input time normally and simply  
                                                              //explode on :
$endTime   = gmdate('Hi',mktime($endminutes,$endseconds));
$subject   = 'yeah';
$desc      = 'come to this meeting';
$location = 'wherever';

$ical = "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true))."
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:".$startdate."T".$startTime."00Z
DTEND:".$enddate."T".$endTime."00Z
LOCATION:$location
SUMMARY:".$subject."
DESCRIPTION:".$desc."
END:VEVENT
END:VCALENDAR";

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=calendar.ics');
echo $ical;

这个网站帮助做到了这一点:http ://www.daveismyname.com/development/adding-events-to-microsoft-outlook-from-php-using-ical/

于 2013-04-26T14:15:24.720 回答