©Sergey Emelyanov 2025 | Alle Rechte vorbehalten
Mit PHP 8.4 wird die Handhabung von Zeitstempeln einfacher: Die neue Methode DateTimeImmutable::createFromTimestamp(int|float $timestamp) erlaubt die Erstellung von präzisen DateTime-Objekten direkt aus Unix-Timestamps – inklusive Mikrosekunden. Doch wie sich zeigt, war diese Funktionalität in abgewandelter Form bereits seit Jahren in PHP verfügbar. Dieser Artikel erklärt die Neuerung und zeigt kompatible Lösungen für alle PHP-Versionen ab 5.5.
Traditionell erforderte die Erstellung von DateTimeImmutable-Objekten aus Timestamps Umwege:
// Alter Ansatz (vor PHP 8.4)
$timestamp = time();
$date = (new DateTimeImmutable())->setTimestamp($timestamp);
Dieser Code vermeidet zwar die problematische mutable DateTime-Klasse, ist aber umständlich und unterstützt keine Mikrosekunden.
Die neue Factory-Methode vereinfacht die Erstellung erheblich:
$microtime = microtime(true); // float: 1734088458.588154
$date = DateTimeImmutable::createFromTimestamp($microtime);
echo $date->format('Y-m-d H:i:s.u');
// Ausgabe: 2024-12-12 15:14:18.588154
Vorteile:
float-TimestampsSeit PHP 5.5 lässt sich der gleiche Effekt mit dem Constructor erreichen:
$microtime = microtime(true);
$date = new DateTimeImmutable('@' . sprintf('%.6F', $microtime));
Funktionsweise:
@-Zeichen kennzeichnet einen Unix-TimestampFür Projekte mit PHP <8.4 empfiehlt sich ein Polyfill:
function createDateTimeFromTimestamp(int|float $timestamp): DateTimeImmutable {
return new DateTimeImmutable(sprintf('@%.6F', $timestamp));
}
// Verwendung
$date = createDateTimeFromTimestamp(microtime(true));
Warum %.6F?
$logTime = createDateTimeFromTimestamp(microtime(true));
file_put_contents('app.log', "[{$logTime->format('H:i:s.u')}] Error occurred"); $start = createDateTimeFromTimestamp(microtime(true));
// ... Code ausführen ...
$end = createDateTimeFromTimestamp(microtime(true));
$diff = $end->diff($start); header('Content-Type: application/json');
echo json_encode([
'timestamp' => createDateTimeFromTimestamp(microtime(true))->format(DateTime::ATOM)
]); $date = createDateTimeFromTimestamp(time())->setTimezone(new DateTimeZone('Europe/Berlin')); try {
$date = createDateTimeFromTimestamp(-123456);
} catch (Exception $e) {
// Handle invalid timestamp
}Während PHP 8.4 mit createFromTimestamp() eine elegantere API bietet, ist die Funktionalität dank des @-Timestamps-Formats schon lange nutzbar. Die vorgestellte Hilfsfunktion ermöglicht konsistenten Code über alle PHP-Versionen hinweg.
Wichtige Erkenntnisse:
Durch die konsequente Nutzung von DateTimeImmutable und präzisen Timestamps werden Zeitbezogene Operationen in PHP deutlich vorhersehbarer und weniger fehleranfällig.
©Sergey Emelyanov 2025 | Alle Rechte vorbehalten