Automattic\WooCommerce\Internal\DataStores\Orders
OrdersTableQuery::local_time_to_gmt_date_query
Returns UTC-based date query arguments for a combination of local time dates and a date shorthand operator.
Method of the class: OrdersTableQuery{}
No Hooks.
Returns
Array. Partial date query arg with relevant dates now UTC-based.
Usage
// private - for code of main (parent) class only $result = $this->local_time_to_gmt_date_query( $dates_raw, $operator );
- $dates_raw(array) (required)
- Array of dates (in local time) to use in combination with the operator.
- $operator(string) (required)
- One of the operators supported by date queries (<, <=, =, ..., >, >
.
Changelog
| Since 8.2.0 | Introduced. |
OrdersTableQuery::local_time_to_gmt_date_query() OrdersTableQuery::local time to gmt date query code WC 10.8.1
private function local_time_to_gmt_date_query( $dates_raw, $operator ) {
$result = array();
// Convert YYYY-MM-DD to UTC timestamp. Per https://developer.woocommerce.com/docs/extensions/core-concepts/wc-get-orders/#date only date is relevant (time is ignored).
foreach ( $dates_raw as &$raw_date ) {
$raw_date = is_numeric( $raw_date ) ? $raw_date : strtotime( get_gmt_from_date( date( 'Y-m-d', strtotime( $raw_date ) ) ) );
}
$date1 = end( $dates_raw );
switch ( $operator ) {
case '>':
$result = array(
'after' => $this->date_to_date_query_arg( $date1 + DAY_IN_SECONDS ),
'inclusive' => true,
);
break;
case '>=':
$result = array(
'after' => $this->date_to_date_query_arg( $date1 ),
'inclusive' => true,
);
break;
case '=':
$result = array(
'relation' => 'AND',
array(
'after' => $this->date_to_date_query_arg( $date1 ),
'inclusive' => true,
),
array(
'before' => $this->date_to_date_query_arg( $date1 + DAY_IN_SECONDS ),
'inclusive' => false,
),
);
break;
case '<=':
$result = array(
'before' => $this->date_to_date_query_arg( $date1 + DAY_IN_SECONDS ),
'inclusive' => false,
);
break;
case '<':
$result = array(
'before' => $this->date_to_date_query_arg( $date1 ),
'inclusive' => false,
);
break;
case '...':
$result = array(
'relation' => 'AND',
$this->local_time_to_gmt_date_query( array( $dates_raw[1] ), '<=' ),
$this->local_time_to_gmt_date_query( array( $dates_raw[0] ), '>=' ),
);
break;
}
if ( ! $result ) {
throw new \Exception( 'Please specify a valid date shorthand operator.' );
}
return $result;
}