[Datumsfunktionen] Datum vergleichen

Marcus Roffmann

Erfahrenes Mitglied
1. Problem
Ich will zwei Daten miteinander vergleichen und so entscheiden ob jemand alt genug ist.
- Sollte jemand über 18 sein ist alles in Ordnung.
- Ist jemand unter 18, aber über 16 benötige ich einen Hinweis der den User darauf aufmerksam macht das er eine Einverständniserklärung der Eltern benötigt.
- Ist jemand unter 16, so wird er darauf hingewiesen das er zu jung ist.

2. Lösung:
Ich habe das Datum das angegeben wurde mittels mktime() Funktion eine UNIX-Timestamp des Datums generiert, soweit es nicht vor 1970 liegt (1970 hat die UNIX-Epoche angefangen).
Danach habe ich mir mittels der date() Funktion das aktuelle Datum sowie das aktuelle Jahr seperat erstellt. Von dem aktuellen Jahr wurde die Werte 18 und 16 abgezogen um die richtigen Daten zu haben die benötigt werden.
Danach wurde auch wieder mit mktime() eine UNIX-Timestamp erstellt und die Timestamps wurden miteinander verglichen.
Kurz angeschnitten:
Wenn Timestamp(Geburtstag) < Timestamp (18 Jahre), dann Benutzer > 18

Wenn Timestamp(Geburtstag) > Timestamp (18 Jahre), Timestamp(Geburtstag) < Timestamp(16 Jahre), dann Benutzer jünger 18, älter 16

Wenn Timestamp(Geburtstag) > Timestamp (16 Jahre), dann Benutzer unter 16, Benutzer zu jung

Folgend habe ich die Funktion abgebildet mit der der Vergleich gemacht wird:
PHP:
<?
    function checkBirthDate($birthday) {
        /* setup birthdate, I know it could be easier, but I just want to
           improve my knowledge */
        $byear    = substr($birthday, 0, 4);
        $bmonth = substr($birthday, 5, 2);
        $bday    = substr($birthday, 8, 2);

        // todays date
        $day    = date("d");
        $month    = date("m");
        $year    = date("Y");
        
        // time is needed to create correct timestamp
        $hour    = date("H");
        $minute    = date("i");
        $second    = date("s");
        
        // to check if he's over 18, year must be 18 years earlier
        $eighteen    = $year - 18;
        
        // if he is over 16, birthyear must be 16 years earlier
        $sixteen    = $year - 16;
        
        // create timestamp of birthdate
        $eighteenstamp    = mktime($hour, $minute, $second, $month, $day, $eighteen);
        $sixteenstamp    = mktime($hour, $minute, $second, $month, $day, $sixteen);
        $birthstamp    = mktime($hour, $minute, $bsecond, $bmonth, $bday, $byear);
        
        // if he's over 18
        if($birthstamp < $eighteenstamp) {
            $result = "You are older than 18";
        }
        
        // if he's under 18, but over 16
        if($birthstamp > $eighteenstamp) {
            if($birthstamp < $sixteenstamp) {
                $result = "You are younger than 18, but older as 16";
            }
        }
        
        // if he's under 16
        if($birthstamp > $sixteenstamp) {
            $result = "You are younger than 16";
        }
        
        // return the correct result message
        return $result;
    }
    
    // just a little test
    print checkBirthDate("1985-04-04")."<br />";
?>
Wozu das ganze?
Es soll ein Anmeldeformular für eine LAN-Party erstellt werden bei dem gleich darauf hingewiesen wird ob er zu jung ist, ob er eine Einverständniserklärung der Eltern braucht oder ob alles soweit in Ordnung ist. Hierfür wurde diese Funktion entwickelt!

Gruß, digi

@Kojote: Sorry, habe die Allgemeinen Regeln beinahe vergessen!
 
so koennte es auch gehen ahbe es jetzt net geprüft, koennte aber funzen ;)

PHP:
###### Birthday ######

$bday = mktime(0, 0, 0, $month, $day, $year); // übergeben Variablen

###### Prüfung #######

$_15y = ((3600*24)*365)*15;  // Da muessen sie schon geboren sein um 18 zu sein
$_13y = ((3600*24)*365)*13;  // Da muessen sie schon geboren sein um 16 zu sein



if($bday >= $_13y) {
print "Kein Zutritt für Kiddies"; }
elseif($bday <= $_13y) {
print "Alter >= 16"; }
elseif($bday <= $_15y) {
print "Alter >= 18"; }
 
Zurück