W3docs

PHP Kalender

Lernen Sie, mit Datum, Uhrzeit und Kalendern in PHP zu arbeiten: date(), mktime(), strtotime() und die DateTime-Klasse mit Beispielen.

Einführung

Dieses Kapitel behandelt die Arbeit mit Datum, Uhrzeit und Kalendern in PHP. Sie lernen die wichtigsten Datums- und Zeitfunktionen kennen, erfahren, wie Sie ein Kalenderraster für einen bestimmten Monat erstellen, und erhalten Best Practices, die Datumslogik über Zeitzonen hinweg korrekt halten. Jedes Beispiel ist klein und ausführbar, sodass Sie es direkt in eine PHP-Datei einfügen können.

Einen tieferen Einblick in einzelne Themen finden Sie in den verwandten Kapiteln zu PHP Datum und Uhrzeit, der date()-Funktion und PHP-Zeitzonen.

PHP-Datums- und Zeitfunktionen verstehen

PHP bietet einen umfangreichen Satz von Datums- und Zeitfunktionen zum Formatieren, Berechnen und Manipulieren von Datum, Uhrzeit und Zeitzonen. Diese Funktionen sind unverzichtbar für Anwendungen, die mit temporalen Daten arbeiten müssen, wie Planer, Buchungssysteme und natürlich Kalender.

PHP liefert auch eine separate Calendar Extension (cal_days_in_month(), jdtogregorian() und ähnliche) zur Konvertierung zwischen Kalendersystemen wie Julian, Gregorianisch und Jüdisch. Die beiden werden häufig verwechselt: Die Calendar Extension konvertiert zwischen Systemen, während die unten aufgeführten Datums-/Zeitfunktionen das alltägliche Formatieren und Rechnen übernehmen. Die meisten „Kalender erstellen"-Aufgaben benötigen nur die Datums-/Zeitfunktionen.

Häufig verwendete PHP-Datums- und Zeitfunktionen

  1. date() – Formatiert einen lokalen Datums- und Zeitstring gemäß einem angegebenen Format.
    echo date("Y-m-d H:i:s"); // Outputs: 2023-10-25 14:30:00
  2. mktime() – Erstellt einen Unix-Zeitstempel für ein angegebenes Datum und eine angegebene Uhrzeit.
    echo mktime(14, 30, 0, 10, 25, 2023); // Outputs: 1698237000
    Hinweis: mktime() nutzt die Standard-Zeitzone des Servers. Für reproduzierbare Ergebnisse sollte eine Zeitzone explizit mit date_default_timezone_set() oder DateTimeZone gesetzt werden.
  3. strtotime() – Parst einen englischen Datums-/Zeitstring in einen Unix-Zeitstempel.
    echo strtotime("now"); // Outputs: current timestamp
    echo strtotime("+1 day"); // Outputs: timestamp for tomorrow
  4. time() – Gibt den aktuellen Unix-Zeitstempel zurück.
    echo time(); // Outputs: current timestamp
  5. DateTime & DateTimeImmutable – Objektorientierte Klassen für sicherere Datums-/Zeitmanipulation und -formatierung.
    $dt = new DateTime('2023-10-25 14:30:00');
    echo $dt->format('Y-m-d H:i:s');

Neben diesen Funktionen gibt es viele weitere zur Manipulation von Datum und Uhrzeit. Das Verständnis ihrer Funktionsweise ermöglicht es Ihnen, effiziente und zuverlässige PHP-Anwendungen zu erstellen.

Wie viele Tage hat ein Monat?

Eine häufige Kalenderaufgabe ist die Ermittlung der Anzahl der Tage in einem bestimmten Monat, die variiert und bei Februar von Schaltjahren abhängt. Es gibt zwei zuverlässige Möglichkeiten, dies zu tun:

// Using the Calendar Extension (requires ext-calendar)
echo cal_days_in_month(CAL_GREGORIAN, 2, 2024); // Outputs: 29 (2024 is a leap year)

// Using date() with the 't' format character (no extension needed)
echo date('t', mktime(0, 0, 0, 2, 1, 2024)); // Outputs: 29

Der Ansatz mit date('t', ...) ist portabel, da er nicht von einer installierten Calendar Extension abhängt.

Einen einfachen Kalender für einen Monat erstellen

Wenn man die einzelnen Teile zusammensetzt, zeigt sich hier, wie man die Tage eines Monats unter Wochentagsspalten ausgerichtet ausgibt. Den ersten Wochentag des Monats ermitteln wir mit date('w', ...) (0 = Sonntag) und die Tagesanzahl mit date('t', ...):

$month = 10;
$year  = 2023;

$firstDayTimestamp = mktime(0, 0, 0, $month, 1, $year);
$daysInMonth       = (int) date('t', $firstDayTimestamp);
$startWeekday      = (int) date('w', $firstDayTimestamp); // 0 = Sunday

echo "Su Mo Tu We Th Fr Sa\n";

// Pad the first row so day 1 lands under the correct weekday.
echo str_repeat('   ', $startWeekday);

for ($day = 1; $day <= $daysInMonth; $day++) {
    printf('%2d ', $day);
    // Break to a new line after Saturday.
    if (($startWeekday + $day) % 7 === 0) {
        echo "\n";
    }
}
echo "\n";

Diese Schleife gibt Oktober 2023 als Kalenderraster aus. Mehr über die hier verwendete Schleife erfahren Sie unter PHP-Schleifen.

Best Practices für PHP-Datums- und Zeitfunktionen

Bei der Verwendung von PHP-Datums- und Zeitfunktionen ist es wichtig, Best Practices zu befolgen, um sicherzustellen, dass Ihre Anwendungen effizient und effektiv sind. Hier sind einige Tipps, die Sie beachten sollten:

  1. Bevorzugen Sie DateTime- und DateTimeImmutable-Objekte gegenüber prozeduralen Funktionen für bessere Lesbarkeit und eingebaute Zeitzonen-Sicherheit.
  2. Setzen Sie immer eine explizite Zeitzone mit DateTimeZone oder date_default_timezone_set(), um unerwartete Verschiebungen bei der Sommerzeit oder Servermigrationen zu vermeiden.
  3. Validieren Sie geparste Daten mit DateTime::getLastErrors(), um ungültige Eingaben frühzeitig zu erkennen und stille Fehler zu vermeiden.
  4. Cachen Sie berechnete Zeitstempel oder formatierte Strings in engen Schleifen, um den Funktionsaufruf-Overhead zu reduzieren.

Fazit

Die Datums- und Zeitfunktionen von PHP sind ein wesentlicher Bestandteil jeder PHP-Anwendung, die mit temporalen Daten arbeiten muss. Wenn Sie verstehen, wie diese Funktionen funktionieren, und Best Practices befolgen, können Sie zuverlässige und effiziente Anwendungen entwickeln.

Übung

Übung
Welche Methoden werden in PHP am häufigsten verwendet, um einen Kalender zu erstellen?
Welche Methoden werden in PHP am häufigsten verwendet, um einen Kalender zu erstellen?
Was this page helpful?