PHP strtotime-Funktion: Datum und Uhrzeit parsen
Die PHP strtotime-Funktion wandelt Datums- und Zeitstrings in Unix-Timestamps um. Erfahren Sie Syntax, Verwendung und bewährte Methoden.
In der PHP-Programmierung ist die Arbeit mit Datums- und Zeitangaben eine häufige Aufgabe, die aufgrund der Vielzahl von Formaten und Zeitzonen in verschiedenen Systemen und Anwendungen eine Herausforderung darstellen kann. Die strtotime-Funktion ist ein leistungsstarkes Werkzeug, das Entwicklern dabei helfen kann, Datums- und Zeitstrings mühelos zu parsen und zu bearbeiten. Sie erfordert jedoch ein gutes Verständnis ihrer Syntax und Optionen, um Fehler und unerwartete Ergebnisse zu vermeiden. In diesem Artikel werden wir die strtotime-Funktion und ihre Verwendung im Detail erkunden und Beispiele sowie Tipps bereitstellen, die Ihnen helfen, Ihre PHP-Programmierkenntnisse zu verbessern.
Was ist die strtotime-Funktion?
Die strtotime-Funktion ist eine eingebaute PHP-Funktion, die eine String-Darstellung eines Datums und/oder einer Uhrzeit in einen Unix-Timestamp umwandelt. Ein Unix-Timestamp ist ein numerischer Wert, der die Anzahl der Sekunden seit dem 1. Januar 1970, 00:00:00 UTC (Koordinierte Weltzeit) darstellt. Der Unix-Timestamp ist ein weit verbreitetes Format zum Speichern und Bearbeiten von Datums- und Zeitangaben in vielen Programmiersprachen und Systemen. Er ermöglicht einen einfachen Vergleich, Berechnungen und die Formatierung von Datums- und Zeitangaben.
Die Syntax der strtotime-Funktion lautet wie folgt:
Die Syntax der strtotime()-Funktion
<?php
strtotime ( string $time [, int $now = time() ] ) : int|falseDabei ist $time der Eingabestring, der das zu parsende Datum und/oder die Uhrzeit enthält, und $now ist ein optionaler Parameter, der den Referenz-Timestamp für relative Berechnungen angibt. Die Funktion gibt einen Unix-Timestamp zurück, wenn der Eingabestring gültig ist, oder false, wenn der String nicht geparst werden kann.
Da der Rückgabewert nur eine Anzahl von Sekunden ist, kombiniert man strtotime() fast immer mit date(), um ihn wieder in etwas menschenlesbares umzuwandeln:
<?php
date_default_timezone_set('UTC');
$timestamp = strtotime("2023-03-03");
echo $timestamp; // 1677801600
echo date("Y-m-d H:i:s", $timestamp); // 2023-03-03 00:00:00Wie verwendet man die strtotime-Funktion?
Die strtotime-Funktion unterstützt eine Vielzahl von Eingabeformaten und Modifikatoren, die kombiniert werden können, um verschiedene Datums- und Zeitausdrücke zu parsen. Einige der gebräuchlichsten Formate und Modifikatoren sind:
- Datumsformate:
YYYY-MM-DD,MM/DD/YYYY,DD-MM-YYYY,YYYY.MM.DDusw. - Zeitformate:
HH:MM:SS,HH:MM,H:M:S AM/PM,HH:MM:SS +/-HHMMusw. - Zeitzonenversätze:
+HHMM,-HHMM,Zusw. - Relative Ausdrücke:
now,yesterday,today,tomorrow,last/next day/week/month/year,+/- N days/weeks/months/years,first/last day/weekday/week/month/year of month/yearusw.
Um die strtotime-Funktion zu verwenden, müssen Sie einen String übergeben, der eines oder mehrere dieser Formate und Modifikatoren enthält. Die Funktion versucht dann, diese zu interpretieren und in einen Unix-Timestamp zu konvertieren. Hier sind einige Beispiele:
Wie verwendet man die strtotime-Funktion?
Wie Sie sehen können, kann die strtotime-Funktion verschiedene Eingabeformate und relative Ausdrücke verarbeiten. Es ist jedoch wichtig zu beachten, dass das Verhalten der Funktion je nach Systemzeitzone, PHP-Version sowie Syntax und Kontext des Eingabestrings variieren kann. Daher wird empfohlen, die strtotime-Funktion mit Vorsicht zu verwenden und die Ausgabe immer zu testen und zu validieren, bevor sie in Produktionscode verwendet wird.
Relative Datumsberechnungen
Eines der nützlichsten Features von strtotime() ist das Parsen relativer Ausdrücke gegenüber einem Basis-Timestamp. Dies macht Fragen wie „Welches Datum ist in einer Woche?" oder „Der erste Tag des nächsten Monats" trivial:
<?php
date_default_timezone_set('UTC');
$base = strtotime("2023-03-03");
echo date("Y-m-d", strtotime("+1 week", $base)); // 2023-03-10
echo date("Y-m-d", strtotime("first day of next month", $base)); // 2023-04-01Umgang mit dem false-Rückgabewert
strtotime() gibt false zurück (keine Exception), wenn es den Eingabestring nicht verstehen kann. Beachten Sie, dass false locker gleich 0 ist. Prüfen Sie daher immer mit dem strikten ===-Operator — andernfalls kann ein fehlgeschlagenes Parsen mit der Epoche (1. Januar 1970) verwechselt werden:
<?php
$timestamp = strtotime("not a real date");
var_dump($timestamp); // bool(false)
if ($timestamp === false) {
echo "Could not parse the date.";
} else {
echo date("Y-m-d", $timestamp);
}Tipps und bewährte Methoden
Hier sind einige Tipps und bewährte Methoden, die Sie bei der Verwendung der strtotime-Funktion in Ihrem PHP-Code befolgen sollten:
- Bereinigen und validieren Sie stets Benutzereingaben: Da die
strtotime-Funktion Benutzereingaben als String akzeptiert, ist es wichtig sicherzustellen, dass die Eingabe sauber und sicher verwendet werden kann. Sie können Funktionen wietrim,strip_tags,htmlspecialcharsund reguläre Ausdrücke verwenden, um unerwünschte Zeichen zu filtern und Injection-Angriffe zu verhindern. - Verwenden Sie explizite Formate und Zeitzonen: Um Mehrdeutigkeiten und Fehler zu vermeiden, wird empfohlen, explizite Datums- und Zeitformate wie ISO 8601 zu verwenden und die Zeitzone explizit anzugeben, entweder als String oder als
DateTimeZone-Objekt. Dies kann mithilfe von Funktionen wiedate,gmdate,DateTime,DateTimeImmutableundDateTimeZoneerreicht werden. - Testen und debuggen Sie Ihren Code: Um sicherzustellen, dass Ihre
strtotime-Funktion wie beabsichtigt funktioniert, sollten Sie sie mit verschiedenen Eingabestrings, Grenzfällen und Szenarien testen und die Ausgabe mit Ihren Erwartungen abgleichen. Sie können Werkzeuge wievar_dump,print_rundassertverwenden, um Ihren Code zu debuggen und Fehler zu erkennen. - Erwägen Sie die Verwendung alternativer Datums- und Zeitbibliotheken: Obwohl die
strtotime-Funktion ein praktisches und leistungsstarkes Werkzeug ist, hat sie einige Einschränkungen und Eigenheiten, die in bestimmten Situationen Probleme verursachen können. Daher sollten Sie in Betracht ziehen, alternative Datums- und Zeitbibliotheken zu verwenden, wie z. B.CarbonoderChronos, die mehr Funktionen und Flexibilität bieten.
Hinweis zu modernem PHP: Für neue Projekte werden die Klassen DateTime und DateTimeImmutable gegenüber strtotime dringend empfohlen, da sie zuverlässiger sind, ein objektorientiertes Design aufweisen und die Zeitzone explizit behandeln. Verwenden Sie strtotime vorwiegend für Legacy-Code oder einfaches relatives Datums-Parsing. Siehe date_create und date_modify für die objektorientierten Entsprechungen.
Verwandte Funktionen
date— formatiert einen Unix-Timestamp in einen lesbaren String.mktime— erstellt einen Timestamp aus einzelnen Datumsbestandteilen statt aus einem String.time— gibt den aktuellen Unix-Timestamp zurück.date_create— die moderne, objektorientierte Möglichkeit, Datumswerte zu parsen.- PHP Datum und Uhrzeit — Überblick über das Datums-/Zeit-Toolkit von PHP.
Fazit
In diesem Artikel haben wir die strtotime-Funktion in PHP und ihre Verwendung beim Parsen und Bearbeiten von Datums- und Zeitstrings untersucht. Wir haben gesehen, wie die Funktion funktioniert, welche Formate und Modifikatoren sie unterstützt und welche Tipps und bewährten Methoden bei ihrer Verwendung in Ihrem Code zu beachten sind. Durch die Anwendung dieser Grundsätze können Sie Ihre PHP-Programmierkenntnisse verbessern und zuverlässigeren Code für die Datumsverarbeitung schreiben. Denken Sie daran, Benutzereingaben stets zu validieren und zu bereinigen, explizite Formate und Zeitzonen zu verwenden, Ihren Code zu testen und zu debuggen sowie bei Bedarf alternative Bibliotheken in Betracht zu ziehen. Viel Erfolg beim Programmieren!
graph TD;
A[strtotime Function] --> B[Unix timestamp];
B --> C[Date comparison];
B --> D[Date calculation];
B --> E[Date formatting];
C --> F[Equal to];
C --> G[Greater than];
C --> H[Less than];
D --> I[Addition];
D --> J[Subtraction];
E --> K[Textual representation];
E --> L[Numeric representation];