setTimezone( $utc )->format( 'Ymd\THis\Z' ); $end = $end_utc->setTimezone( $utc )->format( 'Ymd\THis\Z' ); $loc = $location ?? ''; $dates = $start . '/' . $end; $google = 'https://calendar.google.com/calendar/render?action=TEMPLATE' . '&text=' . rawurlencode( $title ) . '&dates=' . rawurlencode( $dates ) . '&details=' . rawurlencode( $details ) . '&location=' . rawurlencode( $loc ); $outlook = 'https://outlook.live.com/calendar/0/deeplink/compose?path=/calendar/action/compose&rru=addevent' . '&subject=' . rawurlencode( $title ) . '&body=' . rawurlencode( $details ) . '&startdt=' . rawurlencode( $start_utc->setTimezone( $utc )->format( 'Y-m-d\TH:i:s\Z' ) ) . '&enddt=' . rawurlencode( $end_utc->setTimezone( $utc )->format( 'Y-m-d\TH:i:s\Z' ) ) . '&location=' . rawurlencode( $loc ); $office = 'https://outlook.office.com/calendar/0/deeplink/compose?path=/calendar/action/compose&rru=addevent' . '&subject=' . rawurlencode( $title ) . '&body=' . rawurlencode( $details ) . '&startdt=' . rawurlencode( $start_utc->setTimezone( $utc )->format( 'Y-m-d\TH:i:s\Z' ) ) . '&enddt=' . rawurlencode( $end_utc->setTimezone( $utc )->format( 'Y-m-d\TH:i:s\Z' ) ) . '&location=' . rawurlencode( $loc ); $yahoo = 'https://calendar.yahoo.com/?v=60&view=d&type=20' . '&title=' . rawurlencode( $title ) . '&st=' . rawurlencode( $start ) . '&et=' . rawurlencode( $end ) . '&desc=' . rawurlencode( $details ) . '&in_loc=' . rawurlencode( $loc ); return [ 'google' => $google, 'outlook' => $outlook, 'office365' => $office, 'yahoo' => $yahoo, 'apple' => $ics_data_uri ?? '#', ]; } }