( $first ? 75 : 74 ) ) { $chunk = mb_strcut( $line, 0, $first ? 75 : 74, 'UTF-8' ); $out .= ( $first ? '' : ' ' ) . $chunk . "\r\n"; $line = substr( $line, strlen( $chunk ) ); $length = strlen( $line ); $first = false; } return $out . ( $first ? '' : ' ' ) . $line . "\r\n"; } /** * DTSTART/DTEND lines for a date + slot. A window ending before it starts (night) ends the next day. */ function dayslot_ical_times( $date, $slot, $variant_id = '' ) { $range = dayslot_slot_range( $slot ); $day = dayslot_parse_date( $date ); if ( $range && $variant_id && dayslot_night_next_day( dayslot_variant( $variant_id ), $slot ) ) { $day = $day->modify( '+1 day' ); $date = $day->format( 'Y-m-d' ); } if ( ! $range || ! $day ) { return array( 'DTSTART;VALUE=DATE:' . $day->format( 'Ymd' ), 'DTEND;VALUE=DATE:' . $day->modify( '+1 day' )->format( 'Ymd' ), ); } $utc = new DateTimeZone( 'UTC' ); $from = DateTimeImmutable::createFromFormat( 'Y-m-d H:i', $date . ' ' . $range[0], wp_timezone() ); $to = DateTimeImmutable::createFromFormat( 'Y-m-d H:i', $date . ' ' . $range[1], wp_timezone() ); if ( $to <= $from ) { $to = $to->modify( '+1 day' ); } return array( 'DTSTART:' . $from->setTimezone( $utc )->format( 'Ymd\THis\Z' ), 'DTEND:' . $to->setTimezone( $utc )->format( 'Ymd\THis\Z' ), ); }