Formateando fechas en PHP con la función date

Introducción

Día de la semana en PHP con date y arreglos
Día de la semana en PHP con date y arreglos

La función date en PHP funciona para formatear fechas usando algunos modificadores. Lo que hace es formatear un entero que representa a los segundos desde la fecha Unix.

Esta función llamada date recibe 2 argumentos: el primero es obligatorio y es un string que indica el formato.

El segundo es opcional y es un entero representando los segundos transcurridos desde la fecha Unix, si no lo mandamos entonces PHP tomará lo que devuelva la función time.

Devuelve un string con la fecha formateada según el formato indicado.

Para ejemplificar con código, este fragmento en donde no pasamos el segundo argumento…

$fecha = date("Y-m-d");

Y este otro en donde sí lo pasamos pero es time, son completamente lo mismo:

$fecha = date("Y-m-d", time());

Dicho esto, en el segundo argumento podemos pasar otro entero como ya vimos cuando obtuvimos la fecha de mañana en PHP.

Pero lo que hoy veremos será múltiples formatos de fecha en PHP que nos pueden ser útiles.

Formateando fechas con PHP y date

Antes de continuar quiero dejar la documentación oficial en donde podemos ver todos los formatos que existen, aquí listaré únicamente los que me parecen que son de más ayuda.

De igual forma, si tu fecha está mal te recomiendo que veas cómo poner la zona horaria de acuerdo a tu país o lugar de residencia.

Formato con año, mes y día

Este formato es el que más me gusta, aunque claro, no a todos les gustará el que a mí me gusta. En fin, lo pondré primero de igual forma.

Lo que nos dará es algo como 2018-10-04 o YYYY-MM-DD. El formato es:

Y-m-d

El modificador Y es para el año con cuatro cifras, el m para el mes y el d es para el día del mes. Lo usamos así:

$fecha = date("Y-m-d");

Por cierto, los guiones - no son procesados, por lo tanto serán devueltos como están.

Primero el día, luego el mes y finalmente el año

Ahora veamos cómo obtener un formato de DD-MM-YYYY o algo como 04-10-2018. Sería así:

$fecha = date("d-m-Y");

Usamos los mismos modificadores pero en diferente orden.

Con barras o diagonales

En los ejemplos anteriores usamos un guión como separador. También podemos usar la barra / como se ve en el siguiente ejemplo. Ahí obtenemos algo como 04/10/2018:

$fecha = date("d/m/Y");

Lo que hacemos es cambiar los guiones por la barra o diagonal.

Únicamente el año

Si solamente queremos saber el año, pasamos el modificador Y. Así como se ve:

<?php
$anio = date("Y");
echo $anio; # Algo como 2018

De esta forma PHP regresará el año.

El día de la semana (lunes, martes, etcétera)

Como sabemos, los lenguajes de programación (o la mayoría de ellos) entienden en idioma inglés.

Ya sea porque es el lenguaje universal o porque la mayoría de creadores hablan ese idioma, el punto es que si queremos obtener el día de la semana como cadena no podemos hacerlo tan fácil (o tal vez sí, es cuestión de investigar).

Una alternativa a date es usar strftime y setlocale para obtener los días en el idioma que deseemos, pero hoy estamos viendo a date así que con date lo haremos.

Lo que yo propongo es obtener el día de la semana como número, es decir, un entero del 0 al 6 en donde 0 es domingo y 6 es sábado.

Para esto, PHP ofrece el modificador w que hace justo lo que queremos. Lo llamamos así:

$diaDeLaSemana = date("w");

Más tarde podemos convertirlo a entero y usarlo como índice, pero antes de ello definimos un simple arreglo con los días:

<?php
$dias = array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado");

Finalmente usamos el día de la semana como índice para acceder a nuestro arreglo. Y con eso tendremos la cadena del día. Veamos el ejemplo:

<?php
$diaDeLaSemana = date("w");

# Lo convertimos a entero para evitar malos comportamientos
$diaDeLaSemana = intval($diaDeLaSemana);

# Los días, es importante comenzar por domingo porque el modificador w empieza en domingo
$dias = array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado");

# Accedemos al arreglo usando a $diaDeLaSemana como índice
$dia = $dias[$diaDeLaSemana];

# Lo imprimimos
echo "Hoy es $dia"; # Hoy es Jueves
?>

Parece complicado pero no lo es. Simplemente aprovechamos que date devuelve un número entre 0 y 6 y a ese lo usamos como índice. Si es 6, entonces al acceder al arreglo obtendremos el día Sábado. Si es 0 entonces obtenemos Domingo, y así para los otros días.

Año, mes, día, hora, minutos y segundos

Este formato también lo utilizo en mis timestamps. Lo único que hace es mostrar la fecha en un formato que da como resultado 2018-10-04 10:36:20, es decir, el año, mes, día, un espacio, la hora, los minutos y los segundos.

<?php
$fecha = date("Y-m-d H:i:s");
echo $fecha;
# Imprime algo como 2018-10-04 10:40:18

Ahora usamos otros modificadores aparte de los que ya conocemos, el H da la hora. La i minúscula da los minutos y la s minúscula los segundos.

Como vemos, los dos puntos : son omitidos, al igual que el espacio que hay entre la fecha y la hora.

Únicamente la hora

La función date, aunque quiere decir algo como “fecha” también devuelve horas o tiempo como lo vimos arriba. Si sólo queremos obtener la hora actual…

<?php
$horaActual = date("H");
echo $horaActual;
#Imprime algo como 10

Lo que hacemos es llamar a date con el modificador H. Por cierto, devuelve la hora en formato de 24 horas, así que para las 11 de la noche devuelve 23.

La hora con minutos y segundos

Veamos cómo usar a date para obtener la hora, los minutos y los segundos en un formato que dará como resultado algo como 10:49:50

<?php
$hora = date("H:i:s");
echo $hora;
#Imprime algo como 10:49:34

Casi lo mismo que hemos visto arriba.

El número de semana del año

Se supone que el año tiene 52 semanas, yo tampoco lo entiendo bien pero comienzan a contarse desde el primer lunes del año.

El punto es que para obtener el número de semana usamos el modificador W, es decir, la letra doble u en mayúscula:

<?php
$numeroDeSemana = date("W");
echo "Hoy es la semana número $numeroDeSemana";
# Imprime algo como Hoy es la semana número 40

Días que tiene un mes

Aunque esto no tiene que ver con formatear fechas, habrá ocasiones en las que esto será útil. Por ejemplo, para obtener el total de días sin importar que sea año bisiesto.

No recuerdo bien pero algo me dice que a esta función la usamos para obtener el inicio y fin de mes en un post anterior.

El modificador que usamos es la letra t en minúscula. Veamos un ejemplo de código:

<?php
$momentoDelDia = date("a");
echo "El momento del día es $momentoDelDia";
#Imprime algo como El momento del día es am

Saber si es AM o PM

Para terminar, veamos cómo obtener un “am” o “pm” dependiendo del momento del día. Se supone que es am desde las doce de la noche (hora 00:00:00) o madrugada, hasta las 11:59:59 del día.

Y es pm desde las 12:00:00 hasta las 23:59:59.

<?php
$momentoDelDia = date("a");
echo "El momento del día es $momentoDelDia";
#Imprime algo como El momento del día es am

Para esto usamos el modificador a, el cual devolverá am o pm. Y si los queremos en mayúsculas usamos el modificador A (en mayúscula), el cual devolverá AM o PM.

Conclusión

Esta función es muy útil si sabemos explotarla al máximo. Muchos critican la forma en la que PHP maneja las fechas, y recomiendan usar la clase Date.

Yo digo que es cuestión de cada uno, ya que al final ni el lenguaje ni las funciones hacen al programador.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

1 comentario en “Formateando fechas en PHP con la función date”

  1. Pingback: Pequeño sistema de ventas con CodeIgniter y MVC - Parzibyte's blog

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *