2012-08-03 85 views
0

我有一个日期,我将它存储为jQuery中的formatDate函数的时间戳。然后,我再次尝试创建一个ics文件,这是一个将事件时间和细节添加到用户日历的日历文件。然而时间戳格式在ics文件中不起作用,正确的日期没有被添加,所以我需要将它转换为看起来像20091109T101015Z的值。它是当前格式,时间戳看起来像1344466800000这是从this example这是我正在按照创建我的ics文件。将时间戳转换为.ics iCal兼容日期格式

我的php文件链接是http:// domain。 ?COM/icsCreator.php的startDate = 1344380400000 &结束日期= 1345503600000 &事件=航天%20Weather%20Workshop &位置=伦敦

目前我ics文件看起来像

<?php 
$dtStart=$_GET['startDate']; 
$dtEnd=$_GET['endDate']; 
$eventName=$_GET['event']; 
$location=$_GET['location']; 

... 
echo "CREATED:20091109T101015Z\n"; 
echo "DESCRIPTION:$eventName\n"; 
echo "DTEND:$dtEnd\n";  
echo "DTSTART:".$dtStart."\n"; 
echo "LAST-MODIFIED:20091109T101015Z\n"; 
echo "LOCATION:$location\n"; 
... 

?> 
+0

你能删除所有不属于日期问题的行吗? – 2012-08-03 10:36:13

+0

yep have done .. – Nicola 2012-08-03 10:38:47

回答

3

见,如果这个工程:

date('Ymd\THis', $time) 

这里$time可能是您的查询字符串中的startDateendDate。如果你不希望时间:

date('Ymd', $time) 

注意(感谢尼古拉)在这里,$time必须是有效的UNIX时间戳,即它必须代表从新纪元的秒数​​。如果它代表的毫秒数,你需要首先通过1000

编辑正如拉斯指出ķ,你需要添加\Z这两个字符串的结束分摊。

编辑正如Nicola所指出的,你并不需要它。

+0

\ Z在格式字符串的结尾处缺少... – 2012-08-03 10:34:57

+0

谢谢,它现在正在把一个日期放在现在不是以前的doign,但它是错误的,我得到开始时间6/10/71和结束时间10/5/2007! – Nicola 2012-08-03 10:35:37

+1

您可能希望将时间戳记除以1000.是以毫秒为单位吗? – 2012-08-03 10:40:33

4

\ Z正在告诉系统时区。 Z是祖鲁语或世界时。

如果您不介意 - 那么您假设最终用户日历应用程序上的时区设置与您的系统生成时间戳的时区设置相匹配。

仅在美国就有多个时区 - 所以你不能根据你的用户与你在同一个国家做出这样的假设。

为了日期进入日历正确,你需要指定的时区从UTC偏移量加上或减去小时和分钟

注: 日期(“YMD \ THisP”); // P是抵消格林威治标准时间的补偿,适用于所有日历目的。

这将出来把财产以后这样的一个1小时的转变,从GMT

20150601T10:38+01:00 

当与PHP日期的工作,最好使用DateTime对象,那么你就可以轻松地使用和改变timezones

// Start with your local timezone e.g 
$timezone = new \DateTimeZone('Europe/Amsterdam') ; 

// Don't be tempted to use a timezone abbreviation like EST 
// That could mean Eastern Standard Time for USA or Australia. 
// Use a full timezone: http://php.net/manual/en/timezones.php 

$eventdate = new DateTime ('1st September 2015 10:30', $timezone); 

// Convert the time to Universal Time 
$eventdate->setTimezone(new DateTimeZone('UTC')) ; // Universal/Zulu time 

// Return Event Date/Time in calendar ICS friendly format 
// comfortable in the knowledge that it is really in UTC time 
return $eventdate->format('Ymd\THis\Z') ; 
相关问题