php: запись файла .ics (iCal)? Дата форматирования?

Я не специалист по php, и у меня возникли проблемы с форматированием даты для файла .ics.

Поэтому у меня есть цикл, который генерирует запись календаря для каждой $post (где $ post – это событие в моем случае)

 foreach( $posts as $post ) : setup_postdata($post); $ical .= "BEGIN:VEVENT UID:" . md5(uniqid(mt_rand(), true)) . "mysite.com DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z DTSTART:".get_event_date($post)."00Z DTEND:".get_event_end_date($post)."00Z SUMMARY:".get_the_title($post->ID)." DESCRIPTION:".get_the_excerpt($post->ID)." END:VEVENT"; endforeach; . foreach( $posts as $post ) : setup_postdata($post); $ical .= "BEGIN:VEVENT UID:" . md5(uniqid(mt_rand(), true)) . "mysite.com DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z DTSTART:".get_event_date($post)."00Z DTEND:".get_event_end_date($post)."00Z SUMMARY:".get_the_title($post->ID)." DESCRIPTION:".get_the_excerpt($post->ID)." END:VEVENT"; endforeach; 

У меня только проблемы с форматированием даты, поэтому я полностью избавился от нее и надеюсь, что вы, ребята, могли бы мне помочь.

У меня есть две функции get_event_date($post) и get_event_end_date($post) которые возвращают метку времени, например 1258665163 . Как преобразовать эту временную метку в нужный формат для файла iCal .ics?

Кроме того, я также хотел бы добавить time каждого события. Эти две функции называются get_event_time($post) и get_event_end_time($post) которые возвращают время в следующем формате: 11:00 или 14:00

Может ли кто-нибудь помочь мне здесь? Я бы очень признателен за помощь.

В основном вы хотите преобразовать временную метку unix в формат, указанный для iCal.

В руководстве по php есть замечательный комментарий, касающийся функции даты, которая включает эту маленькую жемчужину, делая именно это:

 // Converts a unix timestamp to iCal format (UTC) - if no timezone is // specified then it presumes the uStamp is already in UTC format. // tzone must be in decimal such as 1hr 45mins would be 1.75, behind // times should be represented as negative decimals 10hours behind // would be -10 function unixToiCal($uStamp = 0, $tzone = 0.0) { $uStampUTC = $uStamp + ($tzone * 3600); $stamp = date("Ymd\THis\Z", $uStampUTC); return $stamp; } 

Может быть, это помогает.