W3docs

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|false

Dabei 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:00

Wie 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.DD usw.
  • Zeitformate: HH:MM:SS, HH:MM, H:M:S AM/PM, HH:MM:SS +/-HHMM usw.
  • Zeitzonenversätze: +HHMM, -HHMM, Z usw.
  • 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/year usw.

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?

php— editable, runs on the server

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-01

Umgang 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:

  1. 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 wie trim, strip_tags, htmlspecialchars und reguläre Ausdrücke verwenden, um unerwünschte Zeichen zu filtern und Injection-Angriffe zu verhindern.
  2. 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 wie date, gmdate, DateTime, DateTimeImmutable und DateTimeZone erreicht werden.
  3. 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 wie var_dump, print_r und assert verwenden, um Ihren Code zu debuggen und Fehler zu erkennen.
  4. 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. Carbon oder Chronos, 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];

Übungen

Übung
Was ist der Zweck der 'strtotime'-Funktion in PHP?
Was ist der Zweck der 'strtotime'-Funktion in PHP?
Was this page helpful?