Start · Sprachen · PHP · Referenz · date_create_immutable

date_create_immutable

Funktion

Erzeugt ein neues <code>DateTimeImmutable</code>-Objekt aus einem Datums-/Zeitstring und einer optionalen Zeitzone.

seit PHP 5.5.0 Kategorie: date

Signatur

date_create_immutable(string $datetime = 'now', ?DateTimeZone $timezone = null): DateTimeImmutable|false

Beschreibung

date_create_immutable() ist der prozedurale Alias für den Konstruktor new DateTimeImmutable(). Die Funktion parst den übergebenen Datums-/Zeitstring und liefert ein unveränderliches Datumsobjekt zurück. Im Gegensatz zu date_create() (bzw. DateTime) verändert jede Manipulation des Objekts nicht das Original, sondern gibt stets eine neue Instanz zurück.

Unveränderlichkeit ist der zentrale Vorteil von DateTimeImmutable: Wird das Objekt z. B. mit modify() oder add() verändert, bleibt das Original unberührt. Das verhindert unerwünschte Seiteneffekte, besonders wenn Datumsobjekte an mehrere Stellen weitergegeben werden.

Der Parameter $datetime akzeptiert alle Formate, die von PHPs unterstützten Datumsformaten erkannt werden, z. B. 'now', '2024-06-15', '+1 week' oder Unix-Timestamps wie '@1718400000'. Wird null oder 'now' übergeben, entspricht das dem aktuellen Zeitpunkt.

Schlägt das Parsen des Strings fehl, gibt die Funktion false zurück. Zur Fehleranalyse kann anschließend date_get_last_errors() aufgerufen werden.

Parameter

Name Typ Default Beschreibung
$datetime string now Ein Datums-/Zeitstring in einem von PHP erkannten Format (z. B. 'now', '2024-01-15 08:30:00', '+2 days'). Mit '@'-Präfix kann ein Unix-Timestamp angegeben werden.
$timezone ?DateTimeZone null Ein DateTimeZone-Objekt, das die Zeitzone des erzeugten Datumsobjekts festlegt. Wird null übergeben, wird die per date_default_timezone_set() oder in der php.ini konfigurierte Standard-Zeitzone verwendet. Hat keine Wirkung, wenn $datetime einen Timezone-Offset enthält oder ein Unix-Timestamp mit @ ist.

Rückgabewert

Typ
DateTimeImmutable|false
Beschreibung
Gibt bei Erfolg ein DateTimeImmutable-Objekt zurück. Kann der übergebene String nicht als Datum geparst werden, wird false zurückgegeben. Details zum Fehler sind über date_get_last_errors() abrufbar.

Beispiele

Einfaches Erzeugen eines DateTimeImmutable-Objekts

<?php
$dt = date_create_immutable('2024-06-15 10:00:00');

if ($dt === false) {
    echo 'Ungültiges Datum!';
} else {
    echo $dt->format('d.m.Y H:i:s');
}
15.06.2024 10:00:00

Unveränderlichkeit demonstrieren

<?php
$original = date_create_immutable('2024-01-01');
$nextWeek = $original->modify('+7 days');

echo $original->format('Y-m-d') . PHP_EOL; // Original bleibt unverändert
echo $nextWeek->format('Y-m-d') . PHP_EOL; // Neue Instanz mit +7 Tagen
2024-01-01 2024-01-08

Zeitzonen-Konvertierung mit DateTimeZone

<?php
$tz = new DateTimeZone('America/New_York');
$dt = date_create_immutable('now', $tz);

echo 'New York: ' . $dt->format('Y-m-d H:i:s T') . PHP_EOL;

$dtBerlin = $dt->setTimezone(new DateTimeZone('Europe/Berlin'));
echo 'Berlin:   ' . $dtBerlin->format('Y-m-d H:i:s T');
New York: 2024-06-15 04:00:00 EDT Berlin: 2024-06-15 10:00:00 CEST

// Wichtig · Fallstricke

Fallstrick bei Unix-Timestamps: Wird $datetime als '@1718400000' (mit @-Präfix) angegeben, wird der $timezone-Parameter ignoriert. Die Zeitzone ist dann immer UTC. Um die gewünschte Zeitzone zu setzen, muss anschließend setTimezone() aufgerufen werden.

Empfehlung: Gegenüber date_create() sollte in neuem Code bevorzugt date_create_immutable() verwendet werden, da unveränderliche Objekte zu besser vorhersehbarem und fehlerarmen Code führen, insbesondere in komplexen Berechnungen oder beim Weitergeben von Datumsobjekten an Funktionen.

Für die objektorientierte Schreibweise ist new DateTimeImmutable() gleichwertig und oft bevorzugt, da sie Typhinweise und IDE-Unterstützung besser nutzt.