Introducción
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.
Pingback: Pequeño sistema de ventas con CodeIgniter y MVC - Parzibyte's blog