Con esto el usuario podrá la desicion de ejecutar cualquier otra funcion del sistema en desarrollo.
Para ello me valgo de cuatro funciones de mysql:
TIMESTAMPDIFF
DATEDIFF
CURDATE
DATE_ADD
La sentencia es la siguiente:
Código:
Trataré de Explicarla:SELECT (SELECT TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE())) AS ANIOS, (SELECT (TIMESTAMPDIFF(MONTH,'2010-06-01',CURDATE())) - (TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE()) * 12)) AS MESES, (SELECT DATEDIFF(CURDATE(),DATE_ADD(DATE_ADD('2010-06-01', INTERVAL TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE()) YEAR), INTERVAL (TIMESTAMPDIFF(MONTH,'2010-06-01',CURDATE())) - (TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE()) * 12) MONTH))) AS DIAS
Código:
Este select me obtiene la cantidad de años que han transcurrido desde una fecha hasta el dia de hoy.(SELECT TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE())) AS ANIOS
Código:
Con este select obtengo los meses que han pasado para ello le resto el total de meses, para el ejemplo desde el dia 2010-06-01 hasta el dia 2011-10-19 han pasado 16 meses, a esos 16 meses le resto 12 meses que para entenderlo sería algo así: (SELECT (TIMESTAMPDIFF(MONTH,'2010-06-01',CURDATE())) - (TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE()) * 12)) AS MESES
Código:
Esto me indica que si hay 2 años transcurridos será una resta de 24 meses pero obviamente ya no serían 16 meses anteriores sino 28 meses.16 - (TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE()) * 12))
Código:
Con esta sentencia obtengo los días transcurridos. para ello tengo que anidar la funcion DATE_ADD(SELECT DATEDIFF(CURDATE(),DATE_ADD(DATE_ADD('2010-06-01', INTERVAL TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE()) YEAR), INTERVAL (TIMESTAMPDIFF(MONTH,'2010-06-01',CURDATE())) - (TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE()) * 12) MONTH))) AS DIAS
Ejemplo:
DATE_ADD('2010-06-01' añadir 1 año) = 2011-06-01
a ese resultado añadir los meses resultantes ejemplo:
DATE_ADD('2011-06-01' añadir 4 meses) = 2011-10-01
Ahora necesitamos cuantos días hay desde el 2011-10-01 hasta el dia de hoy (osea el curdate()) para ello ocupo la funcion datediff() así:
DATEDIFF(CURDATE(),'2011-10-01') => Notar que la fecha 2011-10-01 se obtiene asi:
Código HTML:
DATE_ADD(DATE_ADD('2010-06-01', INTERVAL TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE()) YEAR), INTERVAL (TIMESTAMPDIFF(MONTH,'2010-06-01',CURDATE())) - (TIMESTAMPDIFF(YEAR,'2010-06-01',CURDATE()) * 12) MONTH))
Código:
Por favor, revisenla y si hay alguna falla, agredeceré que la publiquen tambien, pues este query es el que he colocado en mi aplicación. /*Inicio*/ SELECT (SELECT TIMESTAMPDIFF(YEAR,'2009-06-01',CURDATE())) AS ANIOS, (SELECT (TIMESTAMPDIFF(MONTH,'2009-06-01',CURDATE())) - (TIMESTAMPDIFF(YEAR,'2009-06-01',CURDATE()) * 12)) AS MESES, (SELECT DATEDIFF(CURDATE(),DATE_ADD(DATE_ADD('2009-06-01', INTERVAL TIMESTAMPDIFF(YEAR,'2009-06-01',CURDATE()) YEAR), INTERVAL (TIMESTAMPDIFF(MONTH,'2009-06-01',CURDATE())) - (TIMESTAMPDIFF(YEAR,'2009-06-01',CURDATE()) * 12) MONTH))) AS DIAS /*Fin*/