©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