core-bundle/src/Resources/contao/library/Contao/Date.php
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 = $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($intHour, (int) $intMinute, (int) $intSecond, (int) $intMonth, (int) $intDay, (int) $intYear);
	}
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 = $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($intHour, (int) $intMinute, (int) $intSecond, (int) $intMonth, (int) $intDay, (int) $intYear);
	}
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 = $ 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 ( $ intHour , ( int ) $ intMinute , ( int ) $ intSecond , ( int ) $ intMonth , ( int ) $ intDay , ( int ) $ intYear ) ; }
Convert a date string into a Unix timestamp using the format string

@throws \Exception            If the format string is invalid
@throws \OutOfBoundsException If the timestamp does not map to a valid date
Convert a date string into a Unix timestamp using the format string