Bienvenidos sean a este post, hoy veremos una función de PHP.
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);
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:
| Formateador | Descripción |
|---|---|
| d | Fecha del día (01 a 31) |
| D | Nombre abreviado del día |
| j | idem a d pero sin los ceros al inicio (1 a 31) |
| l | Nombre completo del día |
| S | Sufijo ingles del día del mes |
| w | Representación numérica del día (diferente a N) |
| z | Día del año |
| F | Nombre completo del mes |
| m | Representación numérica del mes |
| M | Nombre abreviado del mes |
| n | Representación numérica del mes |
| t | Número de días de un mes informado |
| Y | Representación de cuatro dígitos del año |
| y | Representación de dos dígitos del año |
| a | am / pm |
| A | AM / PM |
| g | Formato de 12 horas (1 a 12) |
| G | Formato de 24 horas (0 a 23) |
| h | Formato de 12 horas (01 a 12) |
| H | Formato de 24 horas (00 a 23) |
| i | Minutos (00 a 59) |
| s | Segundos (00 a 59) |
| u | Microsegundos |
| e | Identificador de zona horaria |
| O | Diferencia en horas con Greenwich |
| P | Diferencia en horas:minutos con Greenwich |
| T | Abreviaturas de zona horaria |
| U | La 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. |
Para entender como funciona, vamos a analizar el siguiente ejemplo:
$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);
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.phpDateTimeImmutable 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$
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:
$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);
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.phpDateTimeImmutable 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:8Stack 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$
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.
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:


Donación
Es para mantenimento del sitio, gracias!
$1.50





