Я не специалист по 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; }
Может быть, это помогает.