php: writing a .ics (iCal) file? Date-formatting?

2019-08-09 01:45发布

问题:

I'm not much of a php expert and have troubles formatting the date for a .ics file.

So I have a loop that generates a calendar entry for each $post (where a $post is an event in my case)

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;

I have just problems with formatting the date that's why I got completey rid of it and hope you guys might help me.

I have two functions get_event_date($post) and get_event_end_date($post) that return a timestamp like 1258665163. How can I convert this timestamp into the right format for the iCal .ics file?

Moreover I'd also like to add the time of each event. Those two function are called get_event_time($post) and get_event_end_time($post) which both return a time in the following format: 11:00 or 14:00

Can somebody help me out here? I'd really appreciate some help.

回答1:

Basically you want to convert a unix timestamp to the format specified for iCal.

There's a wonderful little comment in the php manual regarding the date function which includes this little jewel, doing exactly that:

// 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;       

} 

Maybe this helps.