Raketenexemplierer: deustches Datum per PHP überprüfen

Beitrag lesen

Das Escapen von Anführungszeichen im Text sollte nicht notwendig sein. " ist für Code; im Text sollte das Zeichen nicht vorkommen, sondern „ und “ (im Deutschen).

Konsequent warst du auch nicht.

LLAP 🖖

Dann eben so:

<?php

$dateFormat = 'd.m.Y'; #Format des Inputs

$s='2.12.2020'; # Der Input

$sNotBefore = '01.01.2020'; # Nicht vor
$sNotAfter  = '31.12.2021'; # Nicht nach

#Zerlegen des Datums:
list( $d, $m, $y ) = explode( '.', $s, 3 ); 

#checkdate prüft formale Richtigkeit:
if ( checkdate ($m , $d , $y ) ) { 
	echo "Oha   : Das Datum „${s}“ ist möglicherweise richtig und gültig." 
		 . PHP_EOL 
		 . "      ⟹ Ich prüfe mal weiter..." 
		 . PHP_EOL;
	
	#Für die nachfolgenden Vergleiche werden die Strings in ein DateTime-Objekt umgewandelt:
	$d          = date_create_from_format( $dateFormat, $s );
	$dNotBefore = date_create_from_format( $dateFormat, $sNotBefore );
	$dNotAfter  = date_create_from_format( $dateFormat, $sNotAfter );
	
	# DieseDateTime-Objekte kann man vergleichen:
	if ( $d > $dNotAfter ) {
			echo "Schade. Das Datum „${s}“ sah gültig aus, liegt aber nach dem $sNotAfter."  . PHP_EOL;
	} elseif ( $d < $dNotBefore ) {
			echo "Schade: Das Datum „${s}“ sah gültig aus, liegt aber vor dem $sNotBefore."  . PHP_EOL;
	} else {
			echo "Gut   : Gültiges Datum „${s}“ zwischen (einschließlich) $sNotBefore und $sNotAfter.". PHP_EOL;
	}
} else {
	echo "Ochnee. Das angebliche Datum „${s}“ ist schlicht ungültig." . PHP_EOL;
}