GC_Date_Query::build_time_query()
最后更新于:2021-11-27 13:11:20
GC_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).
参数
- $column
-
(string) (Required) The column to query against. Needs to be pre-validated!
- $compare
-
(string) (Required) The comparison operator. Needs to be pre-validated!
- $hour
-
(int|null) (Optional) An hour value (0-23).
Default value: null
- $minute
-
(int|null) (Optional) A minute value (0-59).
Default value: null
- $second
-
(int|null) (Optional) A second value (0-59).
Default value: null
响应
(string|false) A query part or false on failure.
源文件
文件: gc-includes/class-gc-date-query.php
public function build_time_query( $column, $compare, $hour = null, $minute = null, $second = null ) {
global $gcdb;
// 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' ), true ) ) {
$return = array();
$value = $this->build_value( $compare, $hour );
if ( false !== $value ) {
$return[] = "HOUR( $column ) $compare $value";
}
$value = $this->build_value( $compare, $minute );
if ( false !== $value ) {
$return[] = "MINUTE( $column ) $compare $value";
}
$value = $this->build_value( $compare, $second );
if ( false !== $value ) {
$return[] = "SECOND( $column ) $compare $value";
}
return implode( ' AND ', $return );
}
// Cases where just one unit is set.
if ( isset( $hour ) && ! isset( $minute ) && ! isset( $second ) ) {
$value = $this->build_value( $compare, $hour );
if ( false !== $value ) {
return "HOUR( $column ) $compare $value";
}
} elseif ( ! isset( $hour ) && isset( $minute ) && ! isset( $second ) ) {
$value = $this->build_value( $compare, $minute );
if ( false !== $value ) {
return "MINUTE( $column ) $compare $value";
}
} elseif ( ! isset( $hour ) && ! isset( $minute ) && isset( $second ) ) {
$value = $this->build_value( $compare, $second );
if ( false !== $value ) {
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 $gcdb->prepare( "DATE_FORMAT( $column, %s ) $compare %f", $format, $time );
}