parse_w3cdtf

The timeline below displays how wordpress function parse_w3cdtf has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

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;
    }
}

WordPress Version: 3.7

function parse_w3cdtf($date_str)
{
    # regex to match wc3dtf
    $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;
    }
}