Entwickler, der außergewöhnliche CRM- und Laravel-Lösungen liefert

Als erfahrener Entwickler spezialisiere ich mich auf Laravel- und Vue.js-Entwicklung, die Implementierung von Vtiger CRM sowie auf vielfältige WordPress-Projekte. Meine Arbeit zeichnet sich durch kreative, dynamische und benutzerzentrierte Weblösungen aus, die individuell an die Bedürfnisse meiner Kunden angepasst werden.

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.

DateTimeImmutable mit Mikrosekundengenauigkeit in PHP – Neu in 8.4, aber auch in älteren Versionen möglich

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.


Das Problem mit Unix-Timestamps

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 PHP 8.4-Lösung

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:

  • Direkte Unterstützung von float-Timestamps
  • Einzeiler ohne manuelle Formatierung
  • Type Safety durch explizite Signatur

Abwärtskompatibilität – So geht's in allen PHP-Versionen

Seit PHP 5.5 lässt sich der gleiche Effekt mit dem Constructor erreichen:

$microtime = microtime(true);
$date = new DateTimeImmutable('@' . sprintf('%.6F', $microtime));


Funktionsweise:

  • Das @-Zeichen kennzeichnet einen Unix-Timestamp
  • sprintf('%.6F') formatiert den Float mit 6 Dezimalstellen
  • Unterstützt ab PHP 7.1 Mikrosekunden (Demo)

Praktische Hilfsfunktion

Fü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?

  • Sichert genau 6 Dezimalstellen, auch bei Nullen am Ende
  • Vermeidet Locale-Probleme (z. B. Kommas statt Punkten)

Warum DateTimeImmutable und nicht DateTime?

  • Immutability: Jede Manipulation erzeugt ein neues Objekt
  • Thread Safety: Keine Seiteneffekte bei parallelen Operationen
  • Vorhersehbarkeit: Kein Risiko unerwarteter Zustandsänderungen

Anwendungsfälle

  1. Logging mit Mikrosekunden
   $logTime = createDateTimeFromTimestamp(microtime(true));
   file_put_contents('app.log', "[{$logTime->format('H:i:s.u')}] Error occurred");
  1. High-Performance-Messungen
   $start = createDateTimeFromTimestamp(microtime(true));
   // ... Code ausführen ...
   $end = createDateTimeFromTimestamp(microtime(true));
   $diff = $end->diff($start);
  1. API-Antworten
   header('Content-Type: application/json');
   echo json_encode([
       'timestamp' => createDateTimeFromTimestamp(microtime(true))->format(DateTime::ATOM)
   ]);

Best Practices

  • Timezone-Handling: Immer explizit setzen
  $date = createDateTimeFromTimestamp(time())->setTimezone(new DateTimeZone('Europe/Berlin'));
  • Fehlerbehandlung: Ungültige Timestamps abfangen
  try {
      $date = createDateTimeFromTimestamp(-123456);
  } catch (Exception $e) {
      // Handle invalid timestamp
  }

Fazit

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:

  • Mikrosekundengenauigkeit ist seit PHP 7.1 stabil nutzbar
  • Immutable Date-Objekte vermeiden subtile Bugs
  • Einfache Polyfills schaffen Abwärtskompatibilität

Durch die konsequente Nutzung von DateTimeImmutable und präzisen Timestamps werden Zeitbezogene Operationen in PHP deutlich vorhersehbarer und weniger fehleranfällig.