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 1 note

up
1
Dmitrii
1 year 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