Title: WP_Date_Query::build_mysql_datetime
Published: April 25, 2014
Last modified: August 20, 2026

---

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

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#wp--skip-link--target)

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

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#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().

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#parameters)󠁿

 `$datetime`string|arrayrequired

An array of parameters or a strtotime() string.

`$default_to_max`booloptional

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:`false`

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#return)󠁿

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

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#source)󠁿

    ```php
    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'] );
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-date-query.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-includes/class-wp-date-query.php#L882)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-includes/class-wp-date-query.php#L882-L963)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#related)󠁿

| Uses | Description | 
| [wp_timezone()](https://developer.wordpress.org/reference/functions/wp_timezone/)`wp-includes/functions.php` |

Retrieves the timezone of the site as a `DateTimeZone` object.

  | 
| [current_time()](https://developer.wordpress.org/reference/functions/current_time/)`wp-includes/functions.php` |

Retrieves the current time based on specified type.

  |

| Used by | Description | 
| [WP_Date_Query::get_sql_for_clause()](https://developer.wordpress.org/reference/classes/wp_date_query/get_sql_for_clause/)`wp-includes/class-wp-date-query.php` |

Turns a first-order date query into SQL for a WHERE clause.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_date_query/build_mysql_datetime/?output_format=md#changelog)󠁿

| Version | Description | 
| [3.7.0](https://developer.wordpress.org/reference/since/3.7.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_date_query%2Fbuild_mysql_datetime%2F)
before being able to contribute a note or feedback.