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
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:00mktime()– Erstellt einen Unix-Zeitstempel für ein angegebenes Datum und eine angegebene Uhrzeit.Hinweis:echo mktime(14, 30, 0, 10, 25, 2023); // Outputs: 1698237000mktime()nutzt die Standard-Zeitzone des Servers. Für reproduzierbare Ergebnisse sollte eine Zeitzone explizit mitdate_default_timezone_set()oderDateTimeZonegesetzt werden.strtotime()– Parst einen englischen Datums-/Zeitstring in einen Unix-Zeitstempel.echo strtotime("now"); // Outputs: current timestamp echo strtotime("+1 day"); // Outputs: timestamp for tomorrowtime()– Gibt den aktuellen Unix-Zeitstempel zurück.echo time(); // Outputs: current timestampDateTime&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: 29Der 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:
- Bevorzugen Sie
DateTime- undDateTimeImmutable-Objekte gegenüber prozeduralen Funktionen für bessere Lesbarkeit und eingebaute Zeitzonen-Sicherheit. - Setzen Sie immer eine explizite Zeitzone mit
DateTimeZoneoderdate_default_timezone_set(), um unerwartete Verschiebungen bei der Sommerzeit oder Servermigrationen zu vermeiden. - Validieren Sie geparste Daten mit
DateTime::getLastErrors(), um ungültige Eingaben frühzeitig zu erkennen und stille Fehler zu vermeiden. - 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.