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

 133
Author: Chris Seymour, 2010-03-22

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ó.

 204
Author: Pascal MARTIN,
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.

 29
Author: Konrad Gałęzowski,
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
 16
Author: Tobias Cohen,
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.

 6
Author: theblang,
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
 2
Author: vijayabalan,
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

 2
Author: Developer,
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