Cómo obtener el número de días de diferencia entre dos fechas en mysql?
Necesito obtener el número de días contenidos dentro de un par de fechas en mysql.
Por ejemplo: Fecha de entrada 12-04-2010 Fecha de salida 15-04-2010 y la diferencia de día sería 3
6 answers
¿Qué pasa con el DATEDIFF ¿función ?
Citando la página del manual:
DATEDIFF () devuelve expr1-expr2 expresado como un valor en días a partir de un cita con el otro. expr1 y expr2 son expresiones de fecha o fecha y hora. Solo las partes de fecha de los valores son utilizado en el cálculo
En tu caso, usarías :
mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
| 3 |
+--------------------------------------+
1 row in set (0,00 sec)
Pero tenga en cuenta que las fechas deben escribirse como YYYY-MM-DD
, y no DD-MM-YYYY
como usted publicó.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-22 05:38:06
Nota si desea contar días COMPLETOS de 24h entre 2 fechas, datediff puede devolver valores incorrectos para usted.
Como dice la documentación:
Solo se utilizan las partes de fecha de los valores en el cálculo.
Que resulta en
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
Devuelve 1 en lugar de 0 esperado.
La solución está usando select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(observe el orden opuesto de los argumentos en comparación con datediff).
Algunos ejemplos:
-
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
devuelve 0 -
select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
devuelve 1 -
select timestampdiff(DAY, '2016-04-13 11:00:00', now());
devuelve cuántos días completos de 24h han pasado desde 2016-04-13 11:00:00 hasta ahora .
Espero que ayude a alguien, porque al principio no es tan obvio por qué datediff devuelve valores que parecen ser inesperados o incorrectos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-14 09:08:30
Utilice el DATEDIFF()
función.
Ejemplo de la documentación:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-22 05:38:24
Prefiero TIMESTAMPDIFF porque puede cambiar fácilmente la unidad si es necesario.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-09 14:12:30
Obtener días entre la fecha actual y la Fecha de destino
SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
Salida
Días
335
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-12 05:22:42
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM membership_dates md
Salida::
id entity_id start_date end_date days
1 1236 2018-01-16 00:00:00 2018-08-31 00:00:00 227
2 2876 2015-06-26 00:00:00 2019-06-30 00:00:00 1465
3 3880 1990-06-05 00:00:00 2018-07-04 00:00:00 10256
4 3882 1993-07-05 00:00:00 2018-07-04 00:00:00 9130
Espero que ayude a alguien en el futuro
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-20 11:24:11