W3docs

checkdate()

Wie PHP's checkdate() Monat, Tag und Jahr als Gregorianisches Datum prüft. Syntax, Parameter, Schaltjahre und Beispiele.

Einführung

Die Funktion checkdate() prüft, ob Monat, Tag und Jahr zusammen ein gültiges Datum im Gregorianischen Kalender bilden. Sie ist der einfachste Weg in PHP, eine Frage wie „Ist der 29. Februar in diesem Jahr ein gültiges Datum?" zu beantworten, ohne Zeichenketten zu parsen oder ein DateTime-Objekt zu erstellen.

Diese Seite behandelt die Syntax, Parameter und den Rückgabewert von checkdate(), wie sie mit Schaltjahren und ungültigen Werten umgeht, ihre Jahresbereichsbegrenzung und wann stattdessen die Klasse DateTime verwendet werden sollte.

Syntax

checkdate(int $month, int $day, int $year): bool

Parameter

ParameterBeschreibung
$monthDer Monat als Ganzzahl. Gültiger Bereich: 1–12.
$dayDer Tag des Monats. Der gültige Bereich hängt vom Monat und Jahr ab — zum Beispiel ist 30 für April gültig, aber nicht für Februar.
$yearDas Jahr als Ganzzahl. Gültiger Bereich: 1–32767.

Rückgabewert

checkdate() gibt true zurück, wenn das Datum gültig ist, andernfalls false. Das Datum gilt als gültig, wenn alle folgenden Bedingungen erfüllt sind: der Monat liegt zwischen 1 und 12, das Jahr liegt zwischen 1 und 32767, und der Tag liegt im Bereich der Tage, die der angegebene Monat im angegebenen Jahr hat (Schaltjahre werden berücksichtigt).

Grundlegendes Beispiel

So prüfen Sie, ob der 29. Februar 2024 ein gültiges Datum ist (2024 ist ein Schaltjahr, also ja):

php— editable, runs on the server

Das Skript speichert Monat, Tag und Jahr in Variablen, übergibt sie an checkdate() und gibt anhand des zurückgegebenen boolean-Werts eine Meldung aus.

Schaltjahre und ungültige Tage

Der eigentliche Wert von checkdate() besteht darin, dass sie weiß, wie viele Tage jeder Monat hat — einschließlich der Schaltjahrregel für Februar. Dieselbe Tageszahl kann in einem Jahr gültig und im nächsten ungültig sein:

<?php

var_dump(checkdate(2, 29, 2024)); // bool(true)  — 2024 is a leap year
var_dump(checkdate(2, 29, 2023)); // bool(false) — 2023 is not
var_dump(checkdate(4, 31, 2024)); // bool(false) — April has only 30 days
var_dump(checkdate(13, 1, 2024)); // bool(false) — month out of range
var_dump(checkdate(0, 1, 2024));  // bool(false) — month must be >= 1

Da checkdate() diese Prüfungen selbst durchführt, müssen Sie nicht hart kodieren, welche Monate 30 oder 31 Tage haben.

Praktische Anwendung: Formulareingaben validieren

Ein häufiger Einsatz von checkdate() ist das Ablehnen unmöglicher Datumsangaben aus einem Formular, bevor diese gespeichert oder ein DateTime-Objekt erstellt wird:

<?php

function validateDate(int $month, int $day, int $year): string
{
    if (!checkdate($month, $day, $year)) {
        return "Please enter a real calendar date.";
    }

    return "Saved $year-$month-$day.";
}

echo validateDate(2, 30, 2024) . "\n"; // Please enter a real calendar date.
echo validateDate(12, 25, 2024) . "\n"; // Saved 2024-12-25.

Die Jahresbereichsbegrenzung und die DateTime-Alternative

checkdate() akzeptiert nur Jahre im Bereich 1–32767, was für die meisten Anwendungen ausreicht, aber ungeeignet ist, wenn Sie Datumsangaben außerhalb dieses Bereichs benötigen. Außerdem erwartet sie drei separate Ganzzahlen, sodass Sie eine Datumszeichenkette zunächst selbst aufteilen müssen.

Für Zeichenketteneingaben oder strengere Validierung verwenden Sie PHP's Klasse DateTime. DateTime::createFromFormat() parst ein Datum anhand eines benutzerdefinierten Formats, und in Kombination mit DateTime::getLastErrors() können Sie Werte erkennen, die PHP stillschweigend „überschlägt" (zum Beispiel wird der 30. Februar zu dem 1. oder 2. März):

<?php

$input = '2024-02-30';
$date = DateTime::createFromFormat('Y-m-d', $input);
$errors = DateTime::getLastErrors();

if ($date === false || $errors['warning_count'] > 0 || $errors['error_count'] > 0) {
    echo "Invalid date: $input";
} else {
    echo "Valid date: " . $date->format('Y-m-d');
}
// Output: Invalid date: 2024-02-30

Wenn Sie nur Monat, Tag und Jahr als Ganzzahlen vorliegen haben, ist checkdate() die kürzere, abhängigkeitsfreie Wahl.

Verwandte Funktionen

  • mktime() — einen Unix-Timestamp aus einzelnen Datumsteilen erstellen.
  • date() — einen Timestamp in eine lesbare Datumszeichenkette formatieren.
  • strtotime() — ein englisches Datumstextformat in einen Timestamp umwandeln.
  • PHP Datum und Uhrzeit — Übersicht über die Arbeit mit Datumsangaben in PHP.

Fazit

checkdate() ist der schnellste Weg zu bestätigen, dass Monat, Tag und Jahr ein echtes Gregorianisches Datum bilden, wobei Schaltjahre automatisch berücksichtigt werden. Beachten Sie die Jahresbegrenzung von 1–32767, und wechseln Sie zu DateTime::createFromFormat(), wenn Sie Datumszeichenketten validieren oder außerhalb dieses Bereichs arbeiten müssen.

Übung

Übung
Was kann mit der PHP-Funktion checkdate() überprüft werden?
Was kann mit der PHP-Funktion checkdate() überprüft werden?
Was this page helpful?