DateTimeImmutable::__construct

date_create_immutable

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

DateTimeImmutable::__construct -- date_create_immutableLiefert ein neues DateTimeImmutable-Objekt

Beschreibung

Objektorientierter Stil

public DateTimeImmutable::__construct(string $datetime = "now", ?DateTimeZone $timezone = null)

Prozeduraler Stil

Gibt ein neues DateTimeImmutable-Objekt zurück.

Parameter-Liste

datetime

Ein Datums/Zeit Zeichenkette. Gültige Formate werden unter Datums- und Zeitformate erläutert.

Wenn der Parameter $timezone verwendet wird, kann hier mit der Übergabe von "now" die aktuelle Zeit ermittelt werden.

timezone

Ein DateTimeZone-Objekt, das die Zeitzone von $datetime darstellt.

Wenn $timezone nicht übergeben wird oder null ist, wird die aktuelle Zeitzone verwendet.

Hinweis:

Der Parameter $timezone und die aktuelle Zeitzone werden ignoriert, wenn der Parameter $datetime entweder ein UNIX-Zeitstempel ist (z. B. @946684800) oder eine Zeitzone vorgibt (z. B. 2010-01-28T15:00:00+02:00 oder 2010-07-05T06:00:00Z).

Rückgabewerte

Gibt eine neue DateTimeImmutable-Instanz zurück.

Fehler/Exceptions

Wenn eine ungültige Datum/Uhrzeit-Zeichenkette übergeben wird, wird eine DateMalformedStringException geworfen. Vor PHP 8.3 wird eine Exception geworfen.

Changelog

Version Beschreibung
8.3.0 Wirft nun eine DateMalformedStringException anstelle von Exception, wenn eine ungültige Zeichenkette übergeben wird.
7.1.0 Von nun an werden die Mikrosekunden mit dem aktuellen Wert belegt, nicht mit '00000'.

Beispiele

Beispiel #1 DateTimeImmutable::__construct()-Beispiel

Objektorientierter Stil

<?php
try {
$date = new DateTimeImmutable('2000-01-01');
} catch (
Exception $e) {
echo
$e->getMessage();
exit(
1);
}

echo
$date->format('Y-m-d');
?>

Prozeduraler Stil

<?php
$date
= date_create('2000-01-01');
if (!
$date) {
$e = date_get_last_errors();
foreach (
$e['errors'] as $error) {
echo
"$error\n";
}
exit(
1);
}

echo
date_format($date, 'Y-m-d');
?>

Die obigen Bespiele erzeugen folgende Ausgabe:

2000-01-01

Beispiel #2 Die Besonderheiten von DateTimeImmutable::__construct()

<?php
// Datums- und Zeitangaben in der Zeitzone des Computers.
$date = new DateTimeImmutable('2000-01-01');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Datums- und Zeitangaben in der angegebenen Zeitzone.
$date = new DateTimeImmutable('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Aktuelles Datum und aktuelle Uhrzeit in der Zeitzone des Computers.
$date = new DateTimeImmutable();
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Aktuelles Datum und aktuelle Uhrzeit in der angegebenen Zeitzone.
$date = new DateTimeImmutable('now', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Verwendung eines UNIX-Zeitstempels. Zu beachten ist,
// dass das Ergebnis in der Zeitzone UTC liegt.
$date = new DateTimeImmutable('@946684800');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Nicht vorhandene Werte werden fortgeschrieben.
$date = new DateTimeImmutable('2000-02-30');
echo
$date->format('Y-m-d H:i:sP') . "\n";
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

2000-01-01 00:00:00-05:00
2000-01-01 00:00:00+12:00
2010-04-24 10:24:16-04:00
2010-04-25 02:24:16+12:00
2000-01-01 00:00:00+00:00
2000-03-01 00:00:00-05:00

Beispiel #3 Ändern der zugehörigen Zeitzone

<?php
$timeZone
= new \DateTimeZone('Asia/Tokyo');

$time = new \DateTimeImmutable();
$time = $time->setTimezone($timeZone);

echo
$time->format('Y/m/d H:i:s'), "\n";
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

2022/08/12 23:49:23

Beispiel #4 Verwenden einer Zeichenkette mit relativen Datums- und Zeitangaben

<?php
$time
= new \DateTimeImmutable("-1 year");

echo
$time->format('Y/m/d H:i:s'), "\n";
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

2021/08/12 15:43:51
add a note

User Contributed Notes 2 notes

up
3
Dmitrii
2 years ago
"If $timezone is omitted or null, the current timezone will be used." - note, that timezone IS NOT equal offset, if its important for your application.

If default timezone = Europe/Moscow, then:
echo (new \DateTimeImmutable('2014-10'))->format(DATE_ATOM); // gives "2014-10-01T00:00:00+04:00"
echo (new \DateTimeImmutable('2014-11'))->format(DATE_ATOM); // gives "2014-11-01T00:00:00+03:00"
because of law changes (abolition of "summer time").
up
0
theking2 at king dot ma
2 days ago
Working on a (REST) interface between JavaScript and a database needs to take care of the problem of the time zone info. In JavaScript JSON.stringify() will convert all dates to UTC. Makes sense. If we receive and decode this on in the PHP realm we should explicitly say so and altought null indicates the configured locale timezone although I do believe that more often than not no timezone is configured in PHP. So better be save than sorry and prevent you to miss your flight:

<?php
$jsonString
= '{ "date": "2025-05-04T11:58:37.848Z" }';
$dateString = json_decode($jsonString, true)['date']; // will contain the date in UTC (Zulu) tz

$d = new \DateTimeImmutable($dateString, new \DateTimeZone('UTC')); // interpreted as such

$databaseZone = new \DateTimeZone("Europe/Zurich");
$d = $d->setTimeZone( $databaseZone ); // but our server is somewhere else

var_dump($d);

// Now we can store the date in our local database, which is blissfully unaware of timezones

?>
To Top