WP_Date_Query::build_time_query( string $column, string $compare, int|null $hour = null, int|null $minute = null, int|null $second = null )
Builds a query string for comparing time values (hour, minute, second).
Description
If just hour, minute, or second is set than a normal comparison will be done. However if multiple values are passed, a pseudo-decimal time will be created in order to be able to accurately compare against.
Parameters
- $column
-
(Required) The column to query against. Needs to be pre-validated!
- $compare
-
(Required) The comparison operator. Needs to be pre-validated!
- $hour
-
(Optional) An hour value (0-23).
Default value: null
- $minute
-
(Optional) A minute value (0-59).
Default value: null
- $second
-
(Optional) A second value (0-59).
Default value: null
Return
(string|false) A query part or false on failure.
Source
File: wp-includes/date.php
public function build_time_query( $column, $compare, $hour = null, $minute = null, $second = null ) {
global $wpdb;
// Have to have at least one
if ( ! isset( $hour ) && ! isset( $minute ) && ! isset( $second ) )
return false;
// Complex combined queries aren't supported for multi-value queries
if ( in_array( $compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) {
$return = array();
if ( isset( $hour ) && false !== ( $value = $this->build_value( $compare, $hour ) ) )
$return[] = "HOUR( $column ) $compare $value";
if ( isset( $minute ) && false !== ( $value = $this->build_value( $compare, $minute ) ) )
$return[] = "MINUTE( $column ) $compare $value";
if ( isset( $second ) && false !== ( $value = $this->build_value( $compare, $second ) ) )
$return[] = "SECOND( $column ) $compare $value";
return implode( ' AND ', $return );
}
// Cases where just one unit is set
if ( isset( $hour ) && ! isset( $minute ) && ! isset( $second ) && false !== ( $value = $this->build_value( $compare, $hour ) ) ) {
return "HOUR( $column ) $compare $value";
} elseif ( ! isset( $hour ) && isset( $minute ) && ! isset( $second ) && false !== ( $value = $this->build_value( $compare, $minute ) ) ) {
return "MINUTE( $column ) $compare $value";
} elseif ( ! isset( $hour ) && ! isset( $minute ) && isset( $second ) && false !== ( $value = $this->build_value( $compare, $second ) ) ) {
return "SECOND( $column ) $compare $value";
}
// Single units were already handled. Since hour & second isn't allowed, minute must to be set.
if ( ! isset( $minute ) )
return false;
$format = $time = '';
// Hour
if ( null !== $hour ) {
$format .= '%H.';
$time .= sprintf( '%02d', $hour ) . '.';
} else {
$format .= '0.';
$time .= '0.';
}
// Minute
$format .= '%i';
$time .= sprintf( '%02d', $minute );
if ( isset( $second ) ) {
$format .= '%s';
$time .= sprintf( '%02d', $second );
}
return $wpdb->prepare( "DATE_FORMAT( $column, %s ) $compare %f", $format, $time );
}
Changelog
Version | Description |
---|---|
WP-3.7.0 | Introduced. |