Contao\Date::dateToUnix PHP Method

dateToUnix() protected method

Convert a date string into a Unix timestamp using the format string
protected dateToUnix ( )
    protected function dateToUnix()
    {
        if (!static::isNumericFormat($this->strFormat)) {
            throw new \Exception(sprintf('Invalid date format "%s"', $this->strFormat));
        }
        $intCount = 0;
        $intDay = '';
        $intMonth = '';
        $intYear = '';
        $intHour = '';
        $intMinute = '';
        $intSecond = '';
        $blnMeridiem = false;
        $blnCorrectHour = false;
        $arrCharacterMapper = array('d' => 'intDay', 'j' => 'intDay', 'm' => 'intMonth', 'n' => 'intMonth', 'y' => 'intYear', 'Y' => 'intYear', 'h' => 'intHour', 'H' => 'intHour', 'g' => 'intHour', 'G' => 'intHour', 'i' => 'intMinute', 's' => 'intSecond');
        $arrCharacters = str_split($this->strFormat);
        foreach ($arrCharacters as $strCharacter) {
            $var = isset($arrCharacterMapper[$strCharacter]) ? $arrCharacterMapper[$strCharacter] : 'dummy';
            switch ($strCharacter) {
                case 'a':
                case 'A':
                    $blnCorrectHour = true;
                    $blnMeridiem = strtolower(substr($this->strDate, $intCount, 2)) == 'pm' ? true : false;
                    $intCount += 2;
                    break;
                case 'd':
                case 'm':
                case 'y':
                case 'h':
                case 'H':
                case 'i':
                case 's':
                    ${$var} .= substr($this->strDate, $intCount, 2);
                    $intCount += 2;
                    break;
                case 'j':
                case 'n':
                case 'g':
                case 'G':
                    ${$var} .= substr($this->strDate, $intCount++, 1);
                    if (preg_match('/[0-9]+/', substr($this->strDate, $intCount, 1))) {
                        ${$var} .= substr($this->strDate, $intCount++, 1);
                    }
                    break;
                case 'Y':
                    ${$var} .= substr($this->strDate, $intCount, 4);
                    $intCount += 4;
                    break;
                default:
                    ++$intCount;
                    break;
            }
        }
        $intHour = (int) $intHour;
        if ($blnMeridiem) {
            $intHour += 12;
        }
        if ($blnCorrectHour && ($intHour == 12 || $intHour == 24)) {
            $intHour -= 12;
        }
        if ($intMonth == '') {
            $intMonth = 1;
        }
        if ($intDay == '') {
            $intDay = 1;
        }
        if ($intYear == '') {
            $intYear = 1970;
        }
        // Validate the date (see #5086 and #7955)
        if (!is_numeric($intMonth) || !is_numeric($intDay) || !is_numeric($intYear) || checkdate($intMonth, $intDay, $intYear) === false) {
            throw new \OutOfBoundsException(sprintf('Invalid date "%s"', $this->strDate));
        }
        $this->strDate = mktime((int) $intHour, (int) $intMinute, (int) $intSecond, (int) $intMonth, (int) $intDay, (int) $intYear);
    }