Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

Alter berechnen in PHP: Geburtsdatum in Jahre umrechnen

Sie befinden sich: Home > Php Tutorial > Alter berechnen in PHP:...

Alter berechnen in PHP: Geburtsdatum in Jahre umrechnen


Eintrag am:  24.03.2008
Hits / Besucher:  9323
Sprache:  Deutsch
Kategorie:  Fortgeschrittene...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Wer ein Registrierungsformular oder ein Benutzerprofil programmiert, braucht früher oder später eine Möglichkeit, das Alter eines Nutzers anhand seines Geburtsdatums zu berechnen. In PHP geht das mit wenigen Zeilen, und seit der DateTime-Klasse sogar besonders elegant. Dieses Tutorial zeigt dir den modernen Weg mit DateTime::diff(), den klassischen Ansatz mit mktime(), und praktische Szenarien wie die Altersprüfung für Formulare oder das Parsen verschiedener Datumsformate.

graph TD
    A["Geburtsdatum erhalten"] --> B{"PHP >= 5.3?"}
    B -->|Ja| C["DateTime + diff() nutzen"]
    B -->|Nein| D["mktime() + time() nutzen"]
    C --> E["checkdate() zur Validierung"]
    D --> E
    E --> F["Alter in Jahren ausgeben"]

Alter berechnen mit der DateTime-Klasse

Der modernste und zuverlässigste Weg ist die DateTime-Klasse. Sie berücksichtigt Schaltjahre korrekt und liefert über die Methode diff() ein DateInterval-Objekt mit der genauen Differenz.

<?php

function berechneAlter(int $tag, int $monat, int $jahr): int
{
$geburtstag = new DateTime();
$geburtstag->setDate($jahr, $monat, $tag);

$heute = new DateTime();
$differenz = $heute->diff($geburtstag);

return $differenz->y;
}

echo berechneAlter(15, 3, 1990);
/* Gibt z.B. 36 aus (Stand 2026) */
?>

Die Funktion erwartet Tag, Monat und Jahr als Integer. Mit setDate() wird daraus ein DateTime-Objekt erzeugt, und diff() berechnet den Abstand zum heutigen Datum. Die Eigenschaft y des Ergebnisses enthält die vollen Jahre.

Verschiedene Datumsformate parsen

Formulardaten kommen selten im gleichen Format an. Ein deutsches Formular liefert 15.03.1990, eine Datenbank 1990-03-15 und eine API vielleicht 03/15/1990. Mit DateTime::createFromFormat() kannst du jedes beliebige Format zuverlässig parsen.

<?php

/* Deutsches Format: TT.MM.JJJJ */
$dt1 = DateTime::createFromFormat('d.m.Y', '15.03.1990');

/* ISO-Format: JJJJ-MM-TT */
$dt2 = DateTime::createFromFormat('Y-m-d', '1990-03-15');

/* US-Format: MM/TT/JJJJ */
$dt3 = DateTime::createFromFormat('m/d/Y', '03/15/1990');

/* Alle drei ergeben dasselbe Datum */
echo $dt1->format('Y-m-d'); // 1990-03-15
?>

Die folgende Tabelle zeigt die gängigsten Formate und ihre Format-Strings:

FormatBeispielFormat-String
Deutsch15.03.1990d.m.Y
ISO 86011990-03-15Y-m-d
US-Format03/15/1990m/d/Y
Kurz15.3.90d.m.y

Wenn createFromFormat() das Datum nicht parsen kann, gibt die Methode false zurück. Prüfe das Ergebnis also immer, bevor du damit weiterarbeitest.

Eingaben prüfen mit checkdate()

Bevor du das Alter berechnest, solltest du sicherstellen, dass das übergebene Datum überhaupt gültig ist. Die eingebaute Funktion checkdate() prüft genau das, inklusive Schaltjahren.

<?php

function berechneAlter(int $tag, int $monat, int $jahr): int
{
if (!checkdate($monat, $tag, $jahr)) {
throw new InvalidArgumentException(
"Ungültiges Datum: $tag.$monat.$jahr"
);
}

$geburtstag = new DateTime();
$geburtstag->setDate($jahr, $monat, $tag);
$heute = new DateTime();

return $heute->diff($geburtstag)->y;
}
?>

Mit checkdate() werden ungültige Werte wie der 31. Februar oder negative Zahlen zuverlässig erkannt. Statt die() wird hier eine Exception geworfen. So kann der aufrufende Code selbst entscheiden, wie er den Fehler behandelt.

Der klassische Weg mit mktime()

Bevor es die DateTime-Klasse gab, wurde die Altersberechnung häufig über Unix-Timestamps gelöst. Dieser Ansatz funktioniert zwar, hat aber Einschränkungen bei Daten vor 1970.

<?php

function berechneAlterKlassisch(
int $tag, int $monat, int $jahr
): string {
$timestamp = mktime(0, 0, 0, $monat, $tag, $jahr);
$differenz = time() - $timestamp;

return (date("Y", $differenz) - 1970) . " Jahre";
}

echo berechneAlterKlassisch(15, 3, 1990);
?>

Hier wird mit mktime() ein Timestamp des Geburtsdatums erzeugt und vom aktuellen Timestamp abgezogen. Anschließend rechnet date("Y") die Differenz in Jahre um. Seit 1970 abzuziehen liefert das Alter. Für die meisten Fälle reicht das, aber die DateTime-Variante ist präziser und lesbarer.

Alter aus einem Datenbank-Datum berechnen

In der Praxis kommt das Geburtsdatum meistens aus einer MySQL-Datenbank. Das DATE-Feld liefert einen String im Format YYYY-MM-DD, den DateTime direkt verarbeiten kann.

<?php

$pdo = new PDO(
'mysql:host=localhost;dbname=meinedb;charset=utf8mb4',
'benutzer',
'passwort'
);

$stmt = $pdo->prepare(
'SELECT vorname, geburtsdatum FROM benutzer WHERE id = ?'
);
$stmt->execute([42]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if ($user) {
$geburtstag = new DateTime($user['geburtsdatum']);
$alter = (new DateTime())->diff($geburtstag)->y;

echo $user['vorname'] . ' ist ' . $alter . ' Jahre alt.';
}
?>

Da MySQL-Datumsfelder im ISO-Format gespeichert werden, kann new DateTime() den String ohne weitere Konvertierung verarbeiten. Verwende immer Prepared Statements mit Platzhaltern, um SQL-Injection zu verhindern.

Praktisches Anwendungsbeispiel

In der Praxis kommt das Geburtsdatum oft als String aus einem Formular. Hier ein Beispiel, das zeigt, wie du den String zerlegst und das Alter berechnest.

<?php

function alterAusDatumString(string $datum): int
{
$geburtstag = new DateTime($datum);
$heute = new DateTime();

return $heute->diff($geburtstag)->y;
}

/* Aus einem Formularfeld: */
$alter = alterAusDatumString("1990-03-15");
echo "Alter: $alter Jahre";
?>

Wenn du ein Datum im Format YYYY-MM-DD hast, kann DateTime den String direkt verarbeiten. Das spart den Umweg über drei einzelne Parameter und macht den Code noch kompakter.

Altersprüfung für Formulare

Ein häufiger Anwendungsfall ist die Prüfung, ob ein Nutzer ein bestimmtes Mindestalter erreicht hat. Die folgende Funktion prüft, ob jemand volljährig ist, und lässt sich leicht an andere Altersgrenzen anpassen.

<?php

function istVolljaehrig(
string $geburtsdatum,
int $mindestalter = 18
): bool {
$geburtstag = DateTime::createFromFormat(
'Y-m-d', $geburtsdatum
);

if (!$geburtstag) {
return false;
}

$alter = (new DateTime())->diff($geburtstag)->y;
return $alter >= $mindestalter;
}

/* Formularauswertung */
$datum = $_POST['geburtsdatum'] ?? '';

if (!istVolljaehrig($datum)) {
echo 'Du musst mindestens 18 Jahre alt sein.';
} else {
echo 'Registrierung erfolgreich!';
}
?>

Die Funktion gibt false zurück, wenn das Datum ungültig ist oder das Mindestalter nicht erreicht wird. Den Standardwert von 18 kannst du bei Bedarf ändern, zum Beispiel auf 16 für bestimmte Angebote.

Verwandte Tutorials

Diese Tutorials helfen dir, das Thema Datum und Alter in PHP zu vertiefen:

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.