将iso8601日期转换为post_date [_gmt]使用的MySQL DateTime格式。

原型

iso8601_to_datetime( string $date_string, string $timezone = 'user' )

参数

$date_string (string) (Required) ISO 8601格式的日期和时间https://en.wikipedia.org/wiki/ISO_8601。

$timezone (string) (Optional)  如果设置为GMT,则返回时间减去gmt_offset。默认为“用户”。

返回值

(string)  MySQL DateTime格式的日期和时间 – Y-m-d H:i:s。

源文件

路径:wp-includes/formatting.php

<?php
...
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);
	}
}
...
?>

其他

英文文档:https://developer.wordpress.org/reference/functions/iso8601_to_datetime/