PHP 8.5.0 RC4 available for testing

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 procedimental

Devuelve un nuevo objeto DateTimeImmutable.

Parámetros

datetime

Una cadena de fecha/hora. Los formatos válidos son explicados en la documentación sobre los 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');

El ejemplo anterior mostrará:

2000-01-01

Estilo procedimental

<?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 ejemplo anterior mostrará:

2000-01-01

Ejemplo #2 Complejidades de DateTimeImmutable::__construct()

<?php
date_default_timezone_set
('America/Jamaica');

// Especificando una fecha/hora en la zona horaria por omisión
$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 por omisión de PHP.
$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";

Resultado del ejemplo anterior es 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

Nota:

Las fechas desbordadas se pueden detectar comprobando las advertencias mediante DateTimeImmutable::getLastErrors().

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 e'), "\n";

Resultado del ejemplo anterior es similar a:

2022/08/12 23:49:23 Asia/Tokyo

Ejemplo #4 Usando una fecha/hora relativas

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

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

Resultado del ejemplo anterior es similar a:

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

User Contributed Notes 1 note

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").
To Top