Cool C/C++

Programacion en C/C++

Home FAQ Hallar el numero de dias entre 2 fechas
Hallar el numero de dias entre 2 fechas PDF Imprimir E-mail
Escrito por adrianvaca   
Martes, 22 de Marzo de 2011 23:48

Suponiendo que tenemos 2 fechas definidas como:

struct date fechaInicial;
struct date fechaFinal;



Queremos halla el numeo de dias entre fechaInicial y fechaFinal, bien la cabecera y funciones clave de nuestro programas serían:

#include <stdio.h>
#include <dos.h>
#include <conio.h>

#define dias_por_400_anios   (365*400+100-3)
#define es_anio_bisiesto(y)  ((((y)%400)==0)||((((y)%4)==0)&&(((y)%100)!=0)))

enum bool
{
    false = 0,
    true = 1
};

enum Mes
{
   Enero = 1,
   Febrero = 2,
   Marzo = 3,
   Abril = 4,
   Mayo = 5,
   Junio = 6,
   Julio = 7,
   Agosto = 8,
   Septiembre = 9,
   Octubre = 10,
   Noviembre = 11,
   Diciembre = 12
};


long dias_pasados_400_anios(int y)
{
    return ( y > 0 ) ? 365 * y + (y-1) / 4 - (y-1) / 100 + 1 : 0;
}


long dias_pasados_mes (int y, int m)
{
    const int dias[12] = { 0, 31, 31+28, 59+31, 90+30, 120+31,
          151+30, 181+31, 212+31, 243+30, 273+31, 304+30
          /*, 334+31 = 365*/ };

   long resultado;

    resultado = dias[m-1];

    if ( m > Febrero && es_anio_bisiesto ( y ) )
        resultado++;

    return resultado;
}


long dias_pasados_fecha (struct date fecha)
{
    long dias;
    dias = (fecha.da_year/400) * dias_por_400_anios +
            dias_pasados_400_anios ( fecha.da_year % 400 ) +
            dias_pasados_mes ( fecha.da_year, fecha.da_mon ) +
            fecha.da_day;

    return dias;
}

long numero_dias (struct date fechaInicial, struct date fechaFinal)
{
    return dias_pasados_fecha(fechaFinal) -
           dias_pasados_fecha(fechaInicial);
}



La función definida como numero_dias, devuelve el numero de dias entre 2 fechas pasadas como parametros.

Ahora un pequeño programita para verificar si funciona todo esto:

void main()
{
   struct date fechaInicial, fechaFinal;

   fechaInicial.da_day=1;
   fechaInicial.da_mon=6;
   fechaInicial.da_year=2006;

   fechaFinal.da_day=15;
   fechaFinal.da_mon=7;
   fechaFinal.da_year=2006;


   clrscr();

   printf("El numero de dias entre las 2 fechas es: %ld", numero_dias(fechaInicial, fechaFinal));

   getch();
}



Fíjense en lo fácil que resulta determinar si la fecha está en el intervalo especificado, gracias a la función que definimos

 
Otros artículos

Escribir un comentario


Código de seguridad
Refescar