WordPress Version: 6.3
function parse_w3cdtf($date_str)
{
# regex to match W3C date/time formats
$pat = "/(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(:(\\d{2}))?(?:([-+])(\\d{2}):?(\\d{2})|(Z))?/";
if (preg_match($pat, $date_str, $match)) {
list($year, $month, $day, $hours, $minutes, $seconds) = array($match[1], $match[2], $match[3], $match[4], $match[5], $match[7]);
# calc epoch for current date assuming GMT
$epoch = gmmktime($hours, $minutes, $seconds, $month, $day, $year);
$offset = 0;
if ($match[11] == 'Z') {
# zulu time, aka GMT
} else {
list($tz_mod, $tz_hour, $tz_min) = array($match[8], $match[9], $match[10]);
# zero out the variables
if (!$tz_hour) {
$tz_hour = 0;
}
if (!$tz_min) {
$tz_min = 0;
}
$offset_secs = ($tz_hour * 60 + $tz_min) * 60;
# is timezone ahead of GMT? then subtract offset
#
if ($tz_mod == '+') {
$offset_secs = $offset_secs * -1;
}
$offset = $offset_secs;
}
$epoch = $epoch + $offset;
return $epoch;
} else {
return -1;
}
}