¿Cómo sumar varios intervalos de fechas dando el resultado total en años, meses, días?

Ejemplo: de 12/05/2010 a 13/07/2010

de 14/12/2010 a 24/03/2011

de 06/06/2011 a actualmente

Total tiempo: d (días), m (meses), a (años)

1 respuesta

Respuesta

Total de días entre dos fechas:
select to_date('13/07/2010', 'DD/MM/YYYY') - to_date('12/05/2010', 'DD/MM/YYYY')

+ to_date('24/03/2011', 'DD/MM/YYYY') -to_date('14/12/2010', 'DD/MM/YYYY')

+ sysdate - to_date('06/06/2011', 'DD/MM/YYYY')

from dual;

El resultado se puede dividir entre 365, para sacar los años, el resto entre 30 días, para sacar los meses y el resto serán los días.

Como puedes ver surge un problema un año son 365 días o 364 si es bisiesto y análogo con los meses 28, 30 o 31 días. En un rango determinado podrías hacerlo, pero las sumas podrían salir 2 años, 19 meses y 50 días, pero parece un poco raro.

Precisamente el problema son los años bisiestos y los diferentes días a lo largo de meses de numero de días diferentes: 31, 30, 28/29.

La respuesta es demasiado simple. Es evidente que considerar meses de 30 días suponen un desfase de 5 días al año o 6 si es bisiesto. Eso en una vida laboral fraccionada en muchos contratos diferentes sin continuidad puede suponer mucho tiempo.

Podrías intentarse hacer alguna función que sumase las fracciones de día de los meses no completos, acumulándolos en meses_de_31, meses_de_30, meses_de 28 y meses_de_29, sumándolos luego al numero de meses.

De esta manera se minimizaría el problema aunque siempre habrá una cierta desviación.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas