Otro tipo de dato con el que es frecuente interactuar son las horas y / o fechas. Para eso podemos utilizar distintas funciones de MySQL.
NOW
Muestra la hora y fecha en la que se ejecutó la función.
SELECT NOW();
-- NOW tiene algunos sinónimos:
-- CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()
-- LOCALTIME, LOCALTIME()
-- LOCALTIMESTAMP, LOCALTIMESTAMP()
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(), LOCALTIME, LOCALTIME(), LOCALTIMESTAMP, LOCALTIMESTAMP(), NOW();
CURDATE
Muestra la fecha actual *
SELECT CURDATE();
-- CURRENT_DATE y CURRENT_DATE()
-- son sinónimos de CURDATE()
SELECT CURDATE(), CURRENT_DATE, CURRENT_DATE();
CURTIME
Muestra la hora actual *
SELECT CURTIME();
-- CURRENT_TIME, CURRENT_TIME()
-- son sinónimos de CURTIME()
SELECT CURTIME(), CURRENT_TIME, CURRENT_TIME();
* Actual se refiere a la hora y fecha en el equipo en el que está instalado MySQL.
DATE
Con DATE podemos obtener el valor de una fecha – la parte que corresponde a la fecha – de una expresión o de una fecha.
SELECT DATE("2015-01-01 02:25:22");
SELECT nombre, DATE(creado) FROM roles;
DATEDIFF
Calcula el número de días entre dos fechas.
Si la primer fecha es anterior a la segunda fecha el valor que se devuelve es negativo – “fue hace x días ” -. Si la primer fecha es posterior a la segunda fecha el valor que se devuelve es positivo – “va a ser en x días ” -.
-- Primer fecha anterior a la fecha actual
SELECT DATEDIFF("2015-01-01", CURDATE());
-- -221
-- Fecha actual es superior a la fecha especificada
SELECT DATEDIFF(CURDATE(), "2015-01-01");
-- 221
-- Se utiliza DATEDIFF para conocer la diferencia
-- en días entre la fecha de creación / actualización
-- de los roles.
SELECT nombre, creado, actualizado, DATEDIFF(creado, actualizado) FROM roles;
TIME
De manera similar a DATE(), con TIME podemos obtener el valor de la hora de una fecha o de una expresión de hora / fecha.
SELECT TIME("2010-01-01 13:52:23");
SELECT nombre, TIME(creado) FROM roles;
TIMEDIFF
Calcula el número de horas entre dos fechas / horas. Al igual que datediff, si el primer valor es anterior al segundo valor, el valor que se obtiene es negativo – “fue hace x horas ” -. Si el primer valor es posterior al segundo, el valor que se obtiene es positivo – “va a ser en x horas ” -.
SELECT TIMEDIFF("2014-09-25 22:00:00", "2014-09-25 18:00:00");
SELECT TIMEDIFF("22:00:00", "18:00:00");
SELECT nombre, creado, actualizado, TIMEDIFF(creado, actualizado) FROM roles;
-- El valor máximo de TIMEDIFF es aproximadamente de 1 mes + 5 días
SELECT TIMEDIFF('2015-01-01 00:00:00','2015-02-05 00:00:00');
Nota:
El valor máximo que devuelve TIMEDIFF es 838:59:59 / -838:59:59 (que sería un poco más de un mes aprox).
DATEFORMAT
Da formato a una fecha / hora. Utiliza una cadena de texto donde se pueden especificar diferentes combinaciones de caracteres para especificar como va a ser el formato.
SELECT DATE_FORMAT(NOW(), "%a %d %b %Y %T");
SELECT DATE_FORMAT(NOW(), "%d-%m-%Y %T");
SELECT nombre, DATE_FORMAT(creado, "%a %d %b %Y %T") FROM roles;
* http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format
YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
Sirven para seleccionar el año, mes, día, hora, minuto o segundo – respectivamente – del valor asignado como parámetro.
SELECT titulo, creado, YEAR(creado), MONTH(creado), DAY(creado), HOUR(creado), MINUTE(creado), SECOND(creado) FROM publicaciones;
Existen más funciones para trabajar con horas y fechas en MySQL.
Las mencionadas son suficientes para lo que vamos a hacer cuando lleguemos a PHP.