Questa serie di funzioni dovrebbe esserti utile:

codice:
typedef struct tagData
{
	short Giorno;
	short Mese;
	short Anno;
} Data;

/*Restituisce 1 se l'anno è bisestile, 0 altrimenti*/
int IsAnnoBisestile(short nAnno)
{
	if ( nAnno % 4 != 0 )
	{
		return 0;
	}
	else
	{
		if ( nAnno % 100 != 0 )
			return 1;
		else if ( nAnno % 400 != 0 )
			return 0;
		else
			return 1;
	}
}

int GiorniNelMese(short nMese, short nAnno)
{
	switch ( nMese )
	{
	case 2:
		if ( IsAnnoBisestile(nAnno) )
			return 29;
		else
			return 28;

	case 4:
	case 6:
	case 9:
	case 11:
		return 30;

	default:
		return 31;
	}
}

/* Somma nGiorni alla data dt e restituisce la data corrispondente*/
Data SommaGiorni(Data dt, unsigned int nGiorni)
{
	Data dtRet;

	dtRet.Giorno = dt.Giorno;
	dtRet.Mese = dt.Mese;
	dtRet.Anno = dt.Anno;

	for ( int i = 0; i < nGiorni; i++ )
	{
		if ( dtRet.Giorno < GiorniNelMese(dtRet.Mese, dtRet.Anno) )
		{
			dtRet.Giorno++;
		}
		else
		{
			dtRet.Giorno = 1;
			if ( dtRet.Mese != 12 )
			{
				dtRet.Mese++;
			}
			else
			{
				dtRet.Mese = 1;
				dtRet.Anno++;
			}
		}
	}

	return dtRet;
}

/* Sottrae nGiorni alla data dt e restituisce la data corrisponente*/
Data SottraiGiorni(Data dt, unsigned int nGiorni)
{
	Data dtRet;

	dtRet.Giorno = dt.Giorno;
	dtRet.Mese = dt.Mese;
	dtRet.Anno = dt.Anno;

	for ( int i = 0; i < nGiorni; i++ )
	{
		if ( dtRet.Giorno > 1 )
		{
			dtRet.Giorno--;
		}
		else
		{
			if ( dtRet.Mese > 1 )
			{
				dtRet.Mese--;
				dtRet.Giorno = GiorniNelMese(dtRet.Mese, dtRet.Anno);
			}
			else
			{
				dtRet.Giorno = 31;
				dtRet.Mese = 12;
				dtRet.Anno--;
			}
		}
	}

	return dtRet;
}

/*
ConfrontaDate restituisce:
zero se le due date sono uguali;
un valore maggiore di zero se dt1 > dt2;
un valore minore di zero se dt1 < dt2.
*/
int ConfrontaDate(Data dt1, Data dt2)
{
	if ( dt1.Anno == dt2.Anno && dt1.Mese == dt2.Mese && dt1.Giorno == dt2.Giorno )
		return 0;
	else if (dt1.Anno == dt2.Anno ?
			dt1.Mese == dt2.Mese ?
			dt1.Giorno > dt2.Giorno :
			dt1.Mese > dt2.Mese :
			dt1.Anno > dt2.Anno)
		return 1;
	else
		return -1;
}

/* Calcola la differenza in giorni tra due date */
int Differenza(Data dt1, Data dt2)
{
	int nRet = 0;
	Data d1;
	Data d2;

	if ( ConfrontaDate(dt1, dt2) == 0 )
		return 0;
	else if ( ConfrontaDate(dt1, dt2) > 0 )
	{
		d1 = dt2;
		d2 = dt1;
	}
	else
	{
		d1 = dt1;
		d2 = dt2;
	}

	do
	{
		nRet++;
		d1 = SommaGiorni(d1, 1);
	} while ( ConfrontaDate(d1, d2) != 0 );

	return nRet;
}