A WordPress-centric search engine for devs and theme authors



iso8601_to_datetime ›

Since1.5.0
Deprecatedn/a
iso8601_to_datetime ( $date_string, $timezone = 'user' )
Parameters: (2)
  • (string) $date_string Date and time in ISO 8601 format {@link https://en.wikipedia.org/wiki/ISO_8601}.
    Required: Yes
  • (string) $timezone Optional. If set to GMT returns the time minus gmt_offset. Default is 'user'.
    Required: No
    Default: 'user'
Returns:
  • (string) The date and time in MySQL DateTime format - Y-m-d H:i:s.
Defined at:
Codex:

Converts an iso8601 date to MySQL DateTime format used by post_date[_gmt].



Source

function iso8601_to_datetime( $date_string, $timezone = 'user' ) {
	$timezone = strtolower( $timezone );

	if ( $timezone == 'gmt' ) {

		preg_match( '#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', $date_string, $date_bits );

		if ( ! empty( $date_bits[7] ) ) { // we have a timezone, so let's compute an offset
			$offset = iso8601_timezone_to_offset( $date_bits[7] );
		} else { // we don't have a timezone, so we assume user local timezone (not server's!)
			$offset = HOUR_IN_SECONDS * get_option( 'gmt_offset' );
		}

		$timestamp  = gmmktime( $date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1] );
		$timestamp -= $offset;

		return gmdate( 'Y-m-d H:i:s', $timestamp );

	} elseif ( $timezone == 'user' ) {
		return preg_replace( '#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', '$1-$2-$3 $4:$5:$6', $date_string );
	}
}