[Ir al menú de PHP]
Gestión de fechas y horas en MySQL

Añadir intervalos a fechas

Es esta una opción muy útil para gestionar multitud de cuestiones en las que es preciso añadir o sustraer un determinado periodo de tiempo a una fecha. Los ejemplos están darrollados presentando la fehca actual mediante la función NOW() su valor aparecerá en azul y los resultados de aplicar los intervalos positivos (en rojo) y negativos (en magenta).

DATE_ADD(fecha, interv) Desarrollaremos una serie de ejemplos de uso de esta funcion MySQL utilizando la sentencia SELECT seguida de una expresión de este tipo:

DATE_ADD(Now(), inter)

Si sustituimos inter por:

INTERVAL 45 SECOND

resultaría

2008-08-21 22:56:18
2008-08-21 22:57:03
2008-08-21 22:55:33

INTERVAL 15 MINUTE

resultaría

2008-08-21 22:56:18
2008-08-21 23:11:18
2008-08-21 22:41:18

INTERVAL 2 HOUR

resultaría

2008-08-21 22:56:18
2008-08-22 00:56:18
2008-08-21 20:56:18

INTERVAL 3 DAY

resultaría

2008-08-21 22:56:18
2008-08-24 22:56:18
2008-08-18 22:56:18

INTERVAL 5 MONTH

resultaría

2008-08-21 22:56:18
2009-01-21 22:56:18
2008-03-21 22:56:18

INTERVAL 10 YEAR

resultaría

2008-08-21 22:56:18
2018-08-21 22:56:18
1998-08-21 22:56:18

INTERVAL '5:3'
MINUTE_SECOND


resultaría

2008-08-21 22:56:18
2008-08-21 23:01:21
2008-08-21 22:51:15

INTERVAL '8:33'
HOUR_MINUTE


resultaría

2008-08-21 22:56:18
2008-08-22 07:29:18
2008-08-21 14:23:18

INTERVAL '2 4'
DAY_HOUR


resultaría

2008-08-21 22:56:18
2008-08-24 02:56:18
2008-08-19 18:56:18

INTERVAL '5-3'
YEAR_MONTH


resultaría

2008-08-21 22:56:18
2013-11-21 22:56:18
2003-05-21 22:56:18

INTERVAL '12:23:34'
HOUR_SECOND


resultaría

2008-08-21 22:56:18
2008-08-22 11:19:52
2008-08-21 10:32:44

INTERVAL '3 4:12'
DAY_MINUTE


resultaría

2008-08-21 22:56:18
2008-08-25 03:08:18
2008-08-18 18:44:18

INTERVAL '3 4:12:45'
DAY_SECOND


resultaría

2008-08-21 22:56:18
2008-08-25 03:09:03
2008-08-18 18:43:33


 
 


Funciones de fecha en MySQL

Para ejecutar estas funciones de manejo de fechas -específicas de MySQL- es necesario tener activo el servidor MySQL y tener abierta una conexión con el servidor y con una base de datos.

La ejecución de estas funciones requiere -desde PHP- una sintaxis como esta:

      $conexion=mysql_connect("localhost", "pepe","pepa");

      $resultado= mysql_query("instrucción de los ejemplos" ,$conexion);


Descomposición de fechas y horas
Sintaxis Descripción Código fuente Resultado
YEAR(fecha) Extrae el año de la fecha contenida en el campo consultado SELECT
YEAR(Now())
2008
MONTH(fecha) Extrae el número del mes de la fecha contenida en el campo consultado SELECT
MONTH(Now())
8
DAYOFMONTH(fecha) Extrae el día de la fecha contenida en el campo consultado SELECT
DAYOFMONTH(Now())
21
HOUR(fecha) Extrae la hora -en el rango 0 a 23-del campo consultado. Si el campo consultado no contiene hora (solo fecha) devuelve cero SELECT
HOUR(Now())
22
MINUTE(fecha) Extrae los minutos -en el rango 0 a 59-del campo consultado. Si el campo consultado no contiene hora (solo fecha) devuelve cero SELECT
MINUTE(Now())
56
SECOND(fecha) Extrae los segundos -en el rango 0 a 59-del campo consultado. Si el campo consultado no contiene hora (solo fecha) devuelve cer SELECT
SECOND(Now())
18
MONTHNAME(fecha) Extrae el nombre del mes (en inglés) de la fecha contenida en el campo consultado SELECT
MONTHNAME(Now())
August
DAYNAME(fecha) Extrae el nombre del día de la semana (en inglés) de la fecha contenida en el campo consultado SELECT
DAYNAME(Now())
Thursday
DAYOFWEEK(fecha) Extrae el número de día de la semana (rango 1 a 7 y comenzando por el domingo) de la fecha contenida en el campo consultado SELECT
DAYOFWEEK(Now())
5
WEEKDAY(fecha) Extrae el número de día de la semana (rango 0 a 6 , comenzando por el Lunes) de la fecha contenida en el campo consultado SELECT
WEEKDAY(Now())
3
QUARTER(fecha) Extrae el en número de trimestre de la fecha contenida en el campo consultado SELECT
QUARTER(Now())
3
TIME_TO_SEC(fecha) Convierte en segundos un valor expresado en hh:mm:ss SELECT
TIME_TO_SEC(CURTIME())
82578
SEC_TO_TIME(segundos) Convierte un número de segundos en hh:mm:ss SELECT
SEC_TO_TIME(27542))
07:39:02
TO_DAYS(fecha) Devuelve los días transcurridos desde el 1 de Enero del año 0 hasta la fecha. No hace la corrección gregoriana de 1582 y requiere que la fecha introducida sea posterior al 1-1-1000 SELECT
TO_DAYS(Now())
733640
FROM_DAYS(dias) Convierte un número de días (ha de ser mayor de 365) en una fecha contada a partir del 1 de Enero del año 0.
Para fechas anteriores a Octubre de 1582 no hace la corrección de los 10 días descontados en el ajusta del calendario Gregoriano
SELECT
FROM_DAYS(1000000)
2737-11-28
FROM_UNIXTIME(segundos) Convierte los segundos en fecha UNIX. Es decir calcula la fecha cuya diferencia de tiempo con el 01-01-1970 es la que se incluye como segundos en la función SELECT
FROM_UNIXTIME(100000000)
1973-03-03 10:46:40
WEEK(fecha,0) Extrae el número de semana del año en un rango de 0-53 considerando que la semana cero empieza en domingo y que la semana cero comienza a partir del primer domingo del año SELECT
WEEK(Now(),0)
33
WEEK(fecha,1) Extrae el número de semana del año en un rango de 0-53 considerando que la semana cero empieza en Lunes y que la semana cero ha de tener más de tres días dentro del año SELECT
WEEK(Now(),1)
34
WEEK(fecha,2) Extrae el número de semana del año en un rango de 1-53 considerando que la semana cero empieza en domingo y que la semana cero comienza a partir del primer domingo del año SELECT
WEEK(Now(),2)
33
WEEK(fecha,3) Extrae el número de semana del año en un rango de 1-53 considerando que la semana cero empieza en Lunes y que la semana cero ha de tener más de tres días dentro del año SELECT
WEEK(Now(),3)
34
WEEK(fecha,4)* Extrae el número de semana del año en un rango de 0-53 considerando que la semana cero empieza en Lunes y que la semana cero ha de tener más de tres días dentro del año SELECT
WEEK(Now(),4)
34
WEEK(fecha,5) Extrae el número de semana del año en un rango de 0-53 considerando que la semana cero empieza en Lunes y que la semana uno comienza a partir del primer lunes del año SELECT
WEEK(Now(),5)
33
WEEK(fecha,6) Extrae el número de semana del año en un rango de 1-53 considerando que la semana cero empieza en Lunes y que la primera ha de tenr al menos tres dias dentro del año SELECT
WEEK(Now(),6)
34
WEEK(fecha,7) Extrae el número de semana del año en un rango de 1-53 considerando que la semana cero empieza en Lunes y que la semana uno comienza a partir del primer Lunes del año SELECT
WEEK(Now(),7)
33


Acotaciones sobre el manejo de intervalos de fechas

Las cadenas que se utilizan en las funciones DATE_ADD siguen el criterio general de sintaxis de los campos de fecha. Es decir: YYYY-MM-DD hh:mm:ss y requieren los mismos separadores. Es decir para separar año y mes y también mes y día; un espacio para separar día y hora y : para separar horas y minutos y también minutos y segundos.

Cuando se utiliza más de una unidad los valores (junto con sus separadores) van entre comillas y si se trata de valores negativos el ha de ir dentro de las comillas.

Aunque los ejemplos los hemos desarrollado partiendo de NOW(), para extraer la fecha actual, el criterio sería idéntico si la fecha resultara de la lectura de una tabla. Bastaría incluir el nombre del campo de fecha e incluir el FROM nombre de la tabla dentro del SELECT de igual forma que una consulta cualquiera de las que hemos visto en las páginas anteriores.

Aquí tienes un ejemplo de aplicación de algunas de las funciones de fechas y el cálculo de edades a partir de la fecha de nacimiento.
Ver código fuente Ejecutar resumen


Sugerir a un/a amig@ Envíame tus comentarios
Anterior
Indice
Siguiente