PHP 8.3.21 Released!

DateTimeImmutable::__construct

date_create_immutable

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

DateTimeImmutable::__construct -- date_create_immutableDevuelve un nuevo objeto DateTimeImmutable

Descripción

Estilo orientado a objetos

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

Estilo por procedimientos

Devuelve un nuevo objeto DateTimeImmutable.

Parámetros

datetime

Una cadena de fecha/hora. Los formatos válidos se explican en Formatos de fecha y hora.

Introduzca "now" aquí para obtener el instante actual cuando se emplee el parámetro $timezone.

timezone

Un objeto DateTimeZone que representa la zona horaria de $datetime.

Si se omite $timezone o es null, se usará la zona horaria actual.

Nota:

El parámetro $timezone y la zona horaria actuales se ignoran cuando el parámetro $time es una marca temporal de UNIX (p.ej. @946684800) o especifica una zona horaria (p.ej. 2010-01-28T15:00:00+02:00, o 2010-07-05T06:00:00Z).

Valores devueltos

Devuelve una nueva instancia de DateTimeImmutable.

Errores/Excepciones

Si se pasa una cadena de fecha/hora incorrecta, lanza DateMalformedStringException. Hasta PHP 8.3, lanzaba Exception.

Historial de cambios

Versión Descripción
8.3.0 Ahora lanza DateMalformedStringException si se pasa una cadena incorrecta, en vez de Exception.
7.1.0 Desde ahora los microsegundos se rellenan con el valor actual. No con '00000'.

Ejemplos

Ejemplo #1 Ejemplo de DateTimeImmutable::__construct()

Estilo orientado a objetos

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

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

Estilo por procedimientos

<?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');
?>

El resultado de los ejemplos sería:

2000-01-01

Ejemplo #2 Complejidades de DateTimeImmutable::__construct()

<?php
// Especificando una fecha/hora en la zona horaria de su ordenador.

$date = new DateTimeImmutable('2000-01-01');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Especificando una fecha/hora en una zona horaria específica.
$date = new DateTimeImmutable('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Fecha/hora actual en la zona horaria de su ordenador.
Current date/time in your computer's time zone.
$date = new DateTimeImmutable();
echo $date->format('
Y-m-d H:i:sP') . "\n";

// Fecha/hora actual en la zona horaria especificada.
$date = new DateTimeImmutable('
now', new DateTimeZone('Pacific/Nauru'));
echo $date->format('
Y-m-d H:i:sP') . "\n";

// Usando una marca temporal de UNIX (UNIX timestamp). Observe que el resultado está en la zona horaria UTC.
$date = new DateTimeImmutable('
@946684800');
echo $date->format('
Y-m-d H:i:sP') . "\n";

// Completado de los valores inexistentes.
$date = new DateTimeImmutable('
2000-02-30');
echo $date->format('
Y-m-d H:i:sP') . "\n";
?>

El resultado del ejemplo sería algo similar a:

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

Ejemplo #3 Cambiando la zona horaria asociada

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

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

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

El resultado del ejemplo sería algo similar a:

2022/08/12 23:49:23

Ejemplo #4 Usando una fecha/hora relativas

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

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

El resultado del ejemplo sería algo similar a:

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
5 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