Start · Sprachen · PHP · Referenz · strptime

strptime

Funktion

Wertet eine Zeit-/Datumsangabe aus, die mit <code>strftime()</code> erzeugt wurde, und gibt ein assoziatives Array mit den zerlegten Datums- und Zeitkomponenten zurück.

seit PHP 5.1.0 Kategorie: date

Signatur

strptime(string $timestamp, string $format): array|false

Beschreibung

strptime() analysiert einen Datums- oder Zeitstring anhand eines Format-Strings und gibt ein assoziatives Array zurück, das die erkannten Zeitkomponenten enthält. Das Format entspricht dem von strftime() verwendeten Muster, sodass beide Funktionen als Gegenstücke eingesetzt werden können.

Das zurückgegebene Array enthält sowohl formatierte Felder (z. B. tm_year, tm_mon, tm_mday) als auch die Felder tm_wday (Wochentag), tm_yday (Tag im Jahr) und unparsed, das den nicht verarbeiteten Rest des Eingabe-Strings enthält.

Die Funktion ist nicht auf Windows verfügbar und unterliegt den Locale-Einstellungen des Systems, was plattformübergreifend zu unterschiedlichem Verhalten führen kann. Für portablen Code wird daher häufig DateTime::createFromFormat() empfohlen.

Zu beachten ist, dass das Feld tm_year die Anzahl der Jahre seit 1900 enthält (analog zur C-Bibliothek) und tm_mon von 0 (Januar) bis 11 (Dezember) reicht.

Parameter

Name Typ Default Beschreibung
$timestamp Pflicht string Der zu analysierende Datums-/Zeitstring, wie er typischerweise von strftime() erzeugt wurde.
$format Pflicht string Der Format-String, der die Struktur von timestamp beschreibt. Verwendet dieselben Format-Bezeichner wie strftime(), z. B. %d.%m.%Y %H:%M:%S.

Rückgabewert

Typ
array|false
Beschreibung

Bei Erfolg ein assoziatives Array mit folgenden Schlüsseln:

  • tm_sec — Sekunden (0–61)
  • tm_min — Minuten (0–59)
  • tm_hour — Stunden (0–23)
  • tm_mday — Tag des Monats (1–31)
  • tm_mon — Monat (0–11, wobei 0 = Januar)
  • tm_year — Jahre seit 1900
  • tm_wday — Wochentag (0 = Sonntag)
  • tm_yday — Tag im Jahr (0–365)
  • unparsed — nicht geparster Rest des Eingabe-Strings

Bei einem Fehler wird false zurückgegeben.

Beispiele

Einfaches Datum parsen und Komponenten ausgeben

<?php
// Locale setzen (nötig für korrekte Verarbeitung)
setlocale(LC_TIME, 'de_DE.UTF-8');

$dateString = '15.06.2023';
$result = strptime($dateString, '%d.%m.%Y');

if ($result !== false) {
    $day   = $result['tm_mday'];          // 15
    $month = $result['tm_mon'] + 1;       // 6 (tm_mon ist 0-basiert)
    $year  = $result['tm_year'] + 1900;   // 2023 (tm_year = Jahre seit 1900)
    echo sprintf('%04d-%02d-%02d', $year, $month, $day);
} else {
    echo 'Parsing fehlgeschlagen';
}
2023-06-15

Datum mit Uhrzeit parsen und in Unix-Timestamp umwandeln

<?php
setlocale(LC_TIME, 'de_DE.UTF-8');

$dateString = '25.12.2023 14:30:00';
$result = strptime($dateString, '%d.%m.%Y %H:%M:%S');

if ($result !== false) {
    $timestamp = mktime(
        $result['tm_hour'],
        $result['tm_min'],
        $result['tm_sec'],
        $result['tm_mon'] + 1,
        $result['tm_mday'],
        $result['tm_year'] + 1900
    );
    echo date('Y-m-d H:i:s', $timestamp);
} else {
    echo 'Parsing fehlgeschlagen';
}
2023-12-25 14:30:00

Portables Alternativ-Beispiel mit DateTime::createFromFormat

<?php
// Portablere Alternative zu strptime() – funktioniert auf allen Plattformen inkl. Windows
$dateString = '25.12.2023 14:30:00';
$dt = DateTime::createFromFormat('d.m.Y H:i:s', $dateString);

if ($dt !== false) {
    echo $dt->format('Y-m-d H:i:s');
} else {
    echo 'Parsing fehlgeschlagen';
}
2023-12-25 14:30:00

// Wichtig · Fallstricke

Deprecation: Ab PHP 8.1.0 ist strftime() als veraltet markiert. Da strptime() eng mit strftime() zusammenhängt, sollte für neuen Code generell DateTime::createFromFormat() oder DateTimeImmutable::createFromFormat() bevorzugt werden.

Plattform-Einschränkung: strptime() steht unter Windows nicht zur Verfügung, da es keine entsprechende C-Bibliotheksfunktion gibt. Portabler Code sollte daher auf die DateTime-Klasse ausweichen.

Locale-Abhängigkeit: Das Parsing-Verhalten hängt von der aktuellen Locale-Einstellung (gesetzt via setlocale()) ab. Dies kann zu plattformspezifischen Unterschieden führen, insbesondere bei lokalisierten Monats- oder Wochentagsnamen.

Jahres- und Monatswerte: tm_year enthält die Jahre seit 1900, daher muss 1900 addiert werden. tm_mon beginnt bei 0 für Januar, daher muss 1 addiert werden, bevor der Wert mit PHP-Datumsfunktionen verwendet wird.