Tribe__Events__Repositories__Event::filter_by_date_overlaps( string|DateTime|int $start_datetime, string|DateTime|int $end_datetime, string|DateTimeZone $timezone = null, null|int $min_sec_overlap = 1 )
Filters events whose duration overlaps a given Start and End date; fetch is inclusive Will include multi-day events.
Contents
Parameters
- $start_datetime
-
(string|DateTime|int) (Required) A
strtotime
parse-able string, a DateTime object or a timestamp. - $end_datetime
-
(string|DateTime|int) (Required) A
strtotime
parse-able string, a DateTime object or a timestamp. - $timezone
-
(string|DateTimeZone) (Optional) A timezone string, UTC offset or DateTimeZone object; defaults to the site timezone; this parameter is ignored if the
$datetime
parameter is a DatTime object.Default value: null
- $min_sec_overlap
-
(null|int) (Optional) The minimum overlap, in seconds, an event should have with the interval; defaults to at least a second.
Default value: 1
Source
File: src/Tribe/Repositories/Event.php
public function filter_by_date_overlaps( $start_datetime, $end_datetime, $timezone = null ) { global $wpdb; $utc = $this->normal_timezone; $lower = Tribe__Date_Utils::build_date_object( $start_datetime, $timezone )->setTimezone( $utc ); $upper = Tribe__Date_Utils::build_date_object( $end_datetime, $timezone )->setTimezone( $utc ); $lower_string = $lower->format( Tribe__Date_Utils::DBDATETIMEFORMAT ); $upper_string = $upper->format( Tribe__Date_Utils::DBDATETIMEFORMAT ); $start_key = $this->start_meta_key; $end_key = $this->end_meta_key; $join_start_key = 'tribe_start_date_utc'; $join_end_key = 'tribe_end_date_utc'; $this->filter_query->join( "LEFT JOIN {$wpdb->postmeta} {$join_start_key} ON ( {$wpdb->posts}.ID = {$join_start_key}.post_id AND {$join_start_key}.meta_key = '{$start_key}' )" ); $this->filter_query->join( "LEFT JOIN {$wpdb->postmeta} {$join_end_key} ON ( {$wpdb->posts}.ID = {$join_end_key}.post_id AND {$join_end_key}.meta_key = '{$end_key}' )" ); $this->filter_query->where( " ( CAST({$join_start_key}.meta_value AS DATETIME) >= '{$lower_string}' AND CAST({$join_start_key}.meta_value AS DATETIME) <= '{$upper_string}' ) OR ( CAST({$join_end_key}.meta_value AS DATETIME) >= '{$lower_string}' AND CAST({$join_start_key}.meta_value AS DATETIME) <= '{$upper_string}' ) OR ( CAST({$join_start_key}.meta_value AS DATETIME) < '{$lower_string}' AND CAST({$join_end_key}.meta_value AS DATETIME) >= '{$upper_string}' ) " ); }
Changelog
Version | Description |
---|---|
4.9.11 | Add the $min_sec_overlap parameter. |
4.9 | Introduced. |