Anuncios

Bienvenidos sean a este post, hoy veremos una función de PHP.

Anuncios

Esta función nos pemite crear una nueva fecha completa desde un formato de fecha pero el objeto creado es inmutable y no podremos modificarlo salvo que ese resultado lo almacenemos en otro objeto. Pasemos a ver como es su sintaxis:

date_create_immutable_from_format(formato, fecha, zona_horaria);
Anuncios

El primer parámetro será el formato que utilizaremos para crear nuestra fecha. El segundoo será la fecha que creamos y se aplicará al formato anterior. Estos dos son obligatorios pero el tercero es opcional. Este último, es para indicar la zona horaria. A continuación les dejó una lista con los formateadores que podemos utilizar:

FormateadorDescripción
dFecha del día (01 a 31)
DNombre abreviado del día
jidem a d pero sin los ceros al inicio (1 a 31)
lNombre completo del día
SSufijo ingles del día del mes
wRepresentación numérica del día (diferente a N)
zDía del año
FNombre completo del mes
mRepresentación numérica del mes
MNombre abreviado del mes
nRepresentación numérica del mes
tNúmero de días de un mes informado
YRepresentación de cuatro dígitos del año
yRepresentación de dos dígitos del año
aam / pm
AAM / PM
gFormato de 12 horas (1 a 12)
GFormato de 24 horas (0 a 23)
hFormato de 12 horas (01 a 12)
HFormato de 24 horas (00 a 23)
iMinutos (00 a 59)
sSegundos (00 a 59)
uMicrosegundos
eIdentificador de zona horaria
ODiferencia en horas con Greenwich
PDiferencia en horas:minutos con Greenwich
TAbreviaturas de zona horaria
ULa fecha en formato UNIX
#Es la representación de un símbolo separador
?Un byte al azar
*Bytes al azar hasta el próximo separador/dígito
!Restea todos los campos a tiempo Unix
|Restea todos los campos a tiempo Unix sino fueron analizados
+Si están presentes, los datos finales en la cadena provocarán una advertencia, no un error.
Anuncios

Para entender como funciona, vamos a analizar el siguiente ejemplo:

PHP
<?php
$fecha=date_create_immutable_from_format("d#m#Y","22-10-1976");
print_r($fecha);
$zona = new DateTimeZone("America/Argentina/Cordoba");
$fecha=date_create_immutable_from_format("d-m-Y","22-10-2026",$zona);
print_r($fecha);
?>
Anuncios

La primer línea será para crear una fecha con la función. El formato que usaremos es de día, mes y año. Para luego pasar una fecha, lo siguiente es mostrar la fecha mediante print_r. Esto nos mostrará los valores almacenados en el objeto creado. La siguiente línea es una variable donde almacenaremos una nueva zona horaria de tipo DateTimeZone. Las siguientes dos líneas vuelven a hacer lo que mencionamos anteriormente pero ahora agregaremos la zona horaria que generamos anteriormente. Con todo esto comentado, veamos como es la salida:

tinchicus@dbn001vrt:~/lenguajes/php/d$ php date_from_format_imm.php
DateTimeImmutable Object
(
[date] => 1976-10-22 21:07:57.000000
[timezone_type] => 3
[timezone] => UTC
)
DateTimeImmutable Object
(
[date] => 2026-10-22 18:07:57.000000
[timezone_type] => 3
[timezone] => America/Argentina/Cordoba
)
tinchicus@dbn001vrt:~/lenguajes/php/d$
Anuncios

En la salida podemos ver como se generaron las fechas informadas y pudimos manipularlas con date_format pero con la curiosidad de la zona horaria. Donde si no la informamos toma automáticamente a UTC. Observen que nos notifica que los objetos son de tipo inmutable. Tomemos el código anterior y realicemos los siguientes cambios:

PHP
<?php
$fecha=date_create_immutable_from_format("d#m#Y","22-10-1976");
print_r($fecha);
$zona = new DateTimeZone("America/Argentina/Cordoba");
$fecha=date_create_immutable_from_format("d-m-Y","22-10-2026",$zona);
print_r($fecha);
date_add($fecha, date_interval_create_from_date_string("30 days"));
print_r($fecha);
?>
Anuncios

Es el mismo código pero agregamos dos líneas, la primera es con date_add y luego mostramos el cambio realizado con esta. Mediante date_add agregaremos treinta días al objeto inmutable creado anteriormente. Veamos como es la salida:

$ php date_from_format_imm.php
DateTimeImmutable Object
(
[date] => 1976-10-22 21:12:23.000000
[timezone_type] => 3
[timezone] => UTC
)
DateTimeImmutable Object
(
[date] => 2026-10-22 18:12:23.000000
[timezone_type] => 3
[timezone] => America/Argentina/Cordoba
)
PHP Fatal error: Uncaught TypeError: date_add(): Argument #1 ($object) must be of type DateTime, DateTimeImmutable given in /home/tinchicus/lenguajes/php/d/date_from_format_imm.php:8
Stack trace:
#0 /home/tinchicus/lenguajes/php/d/date_from_format_imm.php(8): date_add()
#1 {main}
thrown in /home/tinchicus/lenguajes/php/d/date_from_format_imm.php on line 8
$
Anuncios

Observen que ahora falló por lo mencionado varias veces. Al ser inmutable no podremos modificarlo, salvo que esa modificación la almacenemos en otro objeto. Esto nos puede ser útil si necesitamos que ese valor no se modifique en ningún momento del código. Si se preguntan por qué falló en la segunda ocasión y no en la primera, la razón es simple. En el primer caso no modificamos el valor sino que lo reemplazamos por uno nuevo y eliminamos al primer valor. En el segundo caso sí se intentó modificarlo.

Anuncios

En resumen, hoy hemos visto a date_create_immutable_from_format, que es, para que sirve, como se utiliza, los parámetros que podemos utilizar y un ejemplo simple para ver como trabaja. Espero les haya sido de utilidad, les dejo algunas de mis redes sociales para seguirme o recibir una notificacion cada vez que subo un nuevo post:

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50