Fecha y hora en PHP.

Resumen.

Una de las cosas más básicas en cualquier sitio Web es el registro de la fecha y hora, algo que es muy sencillo pero que puede plantearnos ciertos problemas una vez puestos manos a la obra. En este artículo descubriremos como generar diferentes tipos de fechas, como deben ser guardadas en las bases de datos y como podemos modificarlas para mostrarlas en nuestra página Web.

Artículo.

La fecha y hora es algo que esta presente por todas partes en un sitio Web. Siempre que un usuario se registra en nuestro sitio Web debemos grabar la fecha y la hora, siempre que se hace un pedido es preciso guardar la fecha y hora, toda factura exige, como mínimo, una fecha.

Pues bien, en este artículo nos vamos a dedicar a manejar las fechas, y el tiempo en general, y cuando hablamos de tiempo no nos referimos estrictamente a una fecha entendida en su forma habitual, como 27 de abril de 2022, sino también en términos de segundos transcurridos. Vamos a ello.

La función time() de PHP nos ofrece el tiempo Unix, o número de segundos transcurridos desde la 1 horas del 1 de enero de 1970.


<?php
// Fecha UNIX o tiempo en segundos

$segundos = time();

echo $segundos;
?>


Así de entrada podemos quedarnos un poco con cara de sorpresa, alguien se preguntará que sentido tiene la fecha en segundos. Y si bien de entrada puede parecer algo absurdo, nos puede resultar tremendamente útil. Por ejemplo, podemos crear un artículo hoy, pero no queremos que aparezca en este momento en nuestra Web, y hacer que automáticamente se muestre dentro de una semana.


<?php
// Tiempo UNIX o tiempo en segundos

$proxima_semana = time() + (7 * 24 * 60 * 60);
/* o también como:
$proxima_semana = time() + 604800; */

echo $proxima_semana;
?>


Las operaciones son fáciles de entender, al momento actual time() le sumamos 7 días que tiene la semana, por 24 horas que tiene cada día, por 60 minutos y por 60 segundos.

También podemos hacerlo sumando directamente los segundos al time() actual. 7 * 24 * 60 * 60 = 604.800.

Puede parecer enrevesado, pero si queremos por ejemplo que una oferta de nuestra tienda online se muestre durante los próximos 15 días, es tan sencillo como sumarle al Unix actual 15 * 86400 (donde 86400 son los segundos que tiene un día, 60 segundos * 60 minutos * 24 horas).

La otra forma de obtener la fecha seria la que todos conocemos, 28-04-2022. La función date() nos puede ofrecer las fechas en la forma y orden que deseemos. Para generar una fecha como la anterior necesitamos de la siguiente sintaxis.


<?php
/* La fecha en PHP */

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

echo $fecha;
?>


La función date() es una función nativa que recibe una serie de parámetros definidos en PHP. La “d” en minúscula nos da el día con dos dígitos, la “m” en minúscula nos da el número del mes, también con dos dígitos. La “Y” en mayúscula nos da el año con cuatro dígitos.

Estas, por supuesto no son las únicas opciones, la “w” en minúscula, por ejemplo, nos ofrece el día de la semana devolviendo los valores 0, para el domingo, hasta el 6, para el sábado. Esta función nos puede resultar muy útil para crear por ejemplo la fecha en nuestro idioma, ya que PHP no tiene una función que nos de el día de la semana en español.


<?php
/* Dia de la semana en español */
/* Creamos el array que nos relaciona el valor de date('w') con el respectivo día de la semana */

$dias_semana = array(
'0'=>'Domingo',
'1'=>'Lunes',
'2'=>'Martes',
'3'=>'Miercoles',
'4'=>'Jueves',
'5'=>'Viernes',
'6'=>'Sabado');

$dia = date('w');
// Generamos el valor del array
$semana_espanol = $dias_semana[$dia];

echo "$dia - Hoy es $semana_espanol";
?>


Lo mismo que hemos hecho para el día de la semana, también podemos hacerlo para el mes, que PHP tampoco nos lo ofrece en español, animaos con esa pequeña tarea y será un practico ejercicio.

En la página oficial de PHP tenemos todos los parámetros para tener una fecha en función de nuestras necesidades. Quiero hacer hincapié en algo que, de entrada puede parecer irrelevante, pero que puede dar algún dolor de cabeza. El día, el mes, la hora, por poner unos ejemplos, tienen parámetros diferentes para ofrecerlo con uno o dos dígitos. Por ejemplo, el parámetro “m” nos ofrece el mes con dos dígitos, para agosto devolvería 08, mientras que el parámetro “n” que también devuelve el mes, te devolverá 8.

Es muy importante tener claro con que parámetro estamos trabajando (con o sin cero inicial), ya que si estamos programando en octubre, ambas funciones devolverán lo mismo, y todo ira bien hasta que llega enero y nos aparece un error como regalo de año nuevo.

Las fechas nos pueden presentar otro problema, por ejemplo, en España es bastante común representar la fecha en formato día-mes-año (a mi personalmente es la que mas me gusta), pero este formato se lleva bastante mal con las bases de datos, ya que no permite una ordenación cronológica. Lo ideal para las bases de datos es guardar la fecha en formato año-mes-día, veamos como podemos hacer esta cambio.


<?php
/* Cambiar el orden de la fecha actual */

$fecha_BD = date('Y-m-d');
$segundos_fecha = strtotime($fecha_BD);
$orden_fecha = date('d-m-Y', $segundos_fecha);

echo "
Fecha BD: $fecha_BD <br />
Fecha ordenada: $orden_fecha <br />
Segundos fecha: $segundos_fecha
";

?>


En este código, la variable $fecha_BD recoge la fecha tal y como la almacenaríamos en nuestra base de datos, en formato año-mes-día. Sobre esa fecha, calculamos su fecha Unix, (de la que hablamos al comienzo de este capitulo), con la función strtotime(). Sobre la variable $segundos_fecha, mediante la función date(), marcamos el nuevo orden para $segundos_fecha, día-mes-año, que será el orden en que mostraremos la fecha en nuestra página Web, día-mes-año.

Hasta aquí, hemos hablado solamente de días, meses y años, pero la función date() también nos puede ofrecer la hora minutos y segundos, nos vasta para hacer este pequeño cambio:


<?php
/* La fecha y hora en PHP */

$fecha_hora = date('d-m-Y H:m:s');

echo $fecha_hora;
?>


Solo es cuestión de agregar los parámetros que nos da la página de PHP para cada una de las respectivas unidades de tiempo que queremos mostrar.
Tags: Fecha || hora || segundos || time || date

Comentarios.

Sin comentarios, publica el tuyo.