Signatur
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
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 1900tm_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';
}
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';
}
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';
}
// 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.