WP_Date_Query::build_mysql_datetime() WordPress Method

The WP_Date_Query::build_mysql_datetime() function is used to build a valid SQL datetime string for use in a MySQL query. This function accepts a date/time string in a variety of formats and returns a properly formatted SQL datetime string.

WP_Date_Query::build_mysql_datetime( string|array $datetime, bool $default_to_max = false ) #

Builds a MySQL format date/time based on some query parameters.


Description

You can pass an array of values (year, month, etc.) with missing parameter values being defaulted to either the maximum or minimum values (controlled by the $default_to parameter). Alternatively you can pass a string that will be passed to date_create().


Top ↑

Parameters

$datetime

(string|array)(Required)An array of parameters or a strotime() string

$default_to_max

(bool)(Optional)Whether to round up incomplete dates. Supported by values of $datetime that are arrays, or string values that are a subset of MySQL date format ('Y', 'Y-m', 'Y-m-d', 'Y-m-d H:i'). Default: false.

Default value: false


Top ↑

Return

(string|false) A MySQL format date/time or false on failure


Top ↑

Source

File: wp-includes/class-wp-date-query.php

868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
public function build_mysql_datetime( $datetime, $default_to_max = false ) {
    if ( ! is_array( $datetime ) ) {
 
        /*
         * Try to parse some common date formats, so we can detect
         * the level of precision and support the 'inclusive' parameter.
         */
        if ( preg_match( '/^(\d{4})$/', $datetime, $matches ) ) {
            // Y
            $datetime = array(
                'year' => (int) $matches[1],
            );
 
        } elseif ( preg_match( '/^(\d{4})\-(\d{2})$/', $datetime, $matches ) ) {
            // Y-m
            $datetime = array(
                'year'  => (int) $matches[1],
                'month' => (int) $matches[2],
            );
 
        } elseif ( preg_match( '/^(\d{4})\-(\d{2})\-(\d{2})$/', $datetime, $matches ) ) {
            // Y-m-d
            $datetime = array(
                'year'  => (int) $matches[1],
                'month' => (int) $matches[2],
                'day'   => (int) $matches[3],
            );
 
        } elseif ( preg_match( '/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2})$/', $datetime, $matches ) ) {
            // Y-m-d H:i
            $datetime = array(
                'year'   => (int) $matches[1],
                'month'  => (int) $matches[2],
                'day'    => (int) $matches[3],
                'hour'   => (int) $matches[4],
                'minute' => (int) $matches[5],
            );
        }
 
        // If no match is found, we don't support default_to_max.
        if ( ! is_array( $datetime ) ) {
            $wp_timezone = wp_timezone();
 
            // Assume local timezone if not provided.
            $dt = date_create( $datetime, $wp_timezone );
 
            if ( false === $dt ) {
                return gmdate( 'Y-m-d H:i:s', false );
            }
 
            return $dt->setTimezone( $wp_timezone )->format( 'Y-m-d H:i:s' );
        }
    }
 
    $datetime = array_map( 'absint', $datetime );
 
    if ( ! isset( $datetime['year'] ) ) {
        $datetime['year'] = current_time( 'Y' );
    }
 
    if ( ! isset( $datetime['month'] ) ) {
        $datetime['month'] = ( $default_to_max ) ? 12 : 1;
    }
 
    if ( ! isset( $datetime['day'] ) ) {
        $datetime['day'] = ( $default_to_max ) ? (int) gmdate( 't', mktime( 0, 0, 0, $datetime['month'], 1, $datetime['year'] ) ) : 1;
    }
 
    if ( ! isset( $datetime['hour'] ) ) {
        $datetime['hour'] = ( $default_to_max ) ? 23 : 0;
    }
 
    if ( ! isset( $datetime['minute'] ) ) {
        $datetime['minute'] = ( $default_to_max ) ? 59 : 0;
    }
 
    if ( ! isset( $datetime['second'] ) ) {
        $datetime['second'] = ( $default_to_max ) ? 59 : 0;
    }
 
    return sprintf( '%04d-%02d-%02d %02d:%02d:%02d', $datetime['year'], $datetime['month'], $datetime['day'], $datetime['hour'], $datetime['minute'], $datetime['second'] );
}


Top ↑

Changelog

Changelog
VersionDescription
3.7.0Introduced.

The content displayed on this page has been created in part by processing WordPress source code files which are made available under the GPLv2 (or a later version) license by the Free Software Foundation. In addition to this, the content includes user-written examples and information. All material is subject to review and curation by the WPPaste.com community.