Skip to content

Instantly share code, notes, and snippets.

@HorlogeSkynet
Last active August 21, 2017 07:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HorlogeSkynet/0fa1fad5a432c2415a74 to your computer and use it in GitHub Desktop.
Save HorlogeSkynet/0fa1fad5a432c2415a74 to your computer and use it in GitHub Desktop.
Count the numbers of days between a date in the past and today
#include <stdio.h>
#include <time.h>
#define NBJOURSANNEE 365
#define NBJOURSANNEEBIS 366
#define NBMOISANNEE 12
#define NBJOURSMOIS30 30
#define NBJOURSMOIS31 31
#define NBJOURSJANVIER 31
#define NBJOURSMOIFEB 28
#define NBJOURSMOIFEBBIS 29
#define NBJOURSMARS 31
#define NBJOURSAVRIL 30
#define NBJOURSMAI 31
#define NBJOURSJUIN 30
#define NBJOURSJUILLET 31
#define NBJOURSAOUT 31
#define NBJOURSSEPTEMPBRE 30
#define NBJOURSOCTOBRE 31
#define NBJOURSNOVEMBRE 30
#define NBJOURSDECEMBRE 31
#define JANVIER 1
#define FEVRIER 2
#define MARS 3
#define AVRIL 4
#define MAI 5
#define JUIN 6
#define JUILLET 7
#define AOUT 8
#define SEPTEMBRE 9
#define OCTOBRE 10
#define NOVEMBRE 11
#define DECEMBRE 12
#define true 1
#define false 0
_Bool bissextile(int annee)
{
if(((annee % 4 == 0) && (annee % 100 != 0)) || annee % 400 == 0)
{
return true;
}
else
{
return false;
}
}
//1ère Partie (Bloc Année saisie)
void nombreJoursBloc1(unsigned long int *ptr_nombreJours, unsigned int jour, unsigned int mois, unsigned int annee) //Nombre de Jours jusqu'à la fin du mois + jusqu'au 31/12
{
switch(mois)
{
case JANVIER:
*ptr_nombreJours += (NBJOURSJANVIER - jour);
break;
case FEVRIER:
if(bissextile(annee))
{
*ptr_nombreJours += (NBJOURSMOIFEBBIS - jour);
}
else
{
*ptr_nombreJours += (NBJOURSMOIFEB - jour);
}
break;
case MARS:
*ptr_nombreJours += (NBJOURSMARS - jour);
break;
case AVRIL:
*ptr_nombreJours += (NBJOURSAVRIL - jour);
break;
case MAI:
*ptr_nombreJours += (NBJOURSMAI - jour);
break;
case JUIN:
*ptr_nombreJours += (NBJOURSJUIN - jour);
break;
case JUILLET:
*ptr_nombreJours += (NBJOURSJUILLET - jour);
break;
case AOUT:
*ptr_nombreJours += (NBJOURSAOUT - jour);
break;
case SEPTEMBRE:
*ptr_nombreJours += (NBJOURSSEPTEMPBRE - jour);
break;
case OCTOBRE:
*ptr_nombreJours += (NBJOURSOCTOBRE - jour);
break;
case NOVEMBRE:
*ptr_nombreJours += (NBJOURSNOVEMBRE - jour);
break;
case DECEMBRE:
*ptr_nombreJours += (NBJOURSDECEMBRE - jour);
break;
default:
break;
}
short int i;
for(i = mois + 1; i <= NBMOISANNEE; i++)
{
switch(i)
{
case JANVIER:
//Inutile
break;
case FEVRIER:
if(bissextile(annee))
{
*ptr_nombreJours += NBJOURSMOIFEBBIS;
}
else
{
*ptr_nombreJours += NBJOURSMOIFEB;
}
break;
case MARS:
*ptr_nombreJours += NBJOURSMARS;
break;
case AVRIL:
*ptr_nombreJours += NBJOURSAVRIL;
break;
case MAI:
*ptr_nombreJours += NBJOURSMAI;
break;
case JUIN:
*ptr_nombreJours += NBJOURSJUIN;
break;
case JUILLET:
*ptr_nombreJours += NBJOURSJUILLET;
break;
case AOUT:
*ptr_nombreJours += NBJOURSAOUT;
break;
case SEPTEMBRE:
*ptr_nombreJours += NBJOURSSEPTEMPBRE;
break;
case OCTOBRE:
*ptr_nombreJours += NBJOURSOCTOBRE;
break;
case NOVEMBRE:
*ptr_nombreJours += NBJOURSNOVEMBRE;
break;
case DECEMBRE:
*ptr_nombreJours += NBJOURSDECEMBRE;
break;
default:
break;
}
}
}
//2ème Partie (Bloc nombre d'Années)
void nombreJoursBloc2(unsigned long int *ptr_nombreJours, unsigned int annee, unsigned int anneeActuelle) //Nombre de Jours entre (annee + 1) et (anneeActuelle - 1)
{
unsigned short int i;
for(i = annee + 1; i < anneeActuelle; i++)
{
if(bissextile(i))
{
*ptr_nombreJours += NBJOURSANNEEBIS;
}
else
{
*ptr_nombreJours += NBJOURSANNEE;
}
}
}
//3ème Partie (Bloc Année actuelle)
void nombreJoursBloc3(unsigned long int *ptr_nombreJours, unsigned int jourActuel, unsigned int moisActuel, unsigned int anneeActuelle) //Nombre de Jours du 01/01 à la Date Actuelle
{
*ptr_nombreJours += jourActuel;
unsigned short int i;
for(i = JANVIER; i < moisActuel; i++)
{
switch(i)
{
case JANVIER:
*ptr_nombreJours += NBJOURSJANVIER;
break;
case FEVRIER:
if(bissextile(anneeActuelle))
{
*ptr_nombreJours += NBJOURSMOIFEBBIS;
}
else
{
*ptr_nombreJours += NBJOURSMOIFEB;
}
break;
case MARS:
*ptr_nombreJours += NBJOURSMARS;
break;
case AVRIL:
*ptr_nombreJours += NBJOURSAVRIL;
break;
case MAI:
*ptr_nombreJours += NBJOURSMAI;
break;
case JUIN:
*ptr_nombreJours += NBJOURSJUIN;
break;
case JUILLET:
*ptr_nombreJours += NBJOURSJUILLET;
break;
case AOUT:
*ptr_nombreJours += NBJOURSAOUT;
break;
case SEPTEMBRE:
*ptr_nombreJours += NBJOURSSEPTEMPBRE;
break;
case OCTOBRE:
*ptr_nombreJours += NBJOURSOCTOBRE;
break;
case NOVEMBRE:
*ptr_nombreJours += NBJOURSNOVEMBRE;
break;
case DECEMBRE:
//Inutile
break;
default:
break;
}
}
}
//4ème Partie (Bloc Année actuelle)
void nombreJoursBloc4(unsigned long int *ptr_nombreJours, unsigned int jour, unsigned int mois, unsigned int annee, unsigned int jourActuel, unsigned int moisActuel) //Nombre de Jours entre les deux Dates
{
if(mois == moisActuel)
{
*ptr_nombreJours += (jourActuel - jour);
}
else
{
*ptr_nombreJours += jourActuel;
switch(mois)
{
case JANVIER:
*ptr_nombreJours += (NBJOURSJANVIER - jour);
break;
case FEVRIER:
if(bissextile(annee))
{
*ptr_nombreJours += (NBJOURSMOIFEBBIS - jour);
}
else
{
*ptr_nombreJours += (NBJOURSMOIFEB - jour);
}
break;
case MARS:
*ptr_nombreJours += (NBJOURSMARS - jour);
break;
case AVRIL:
*ptr_nombreJours += (NBJOURSAVRIL - jour);
break;
case MAI:
*ptr_nombreJours += (NBJOURSMAI - jour);
break;
case JUIN:
*ptr_nombreJours += (NBJOURSJUIN - jour);
break;
case JUILLET:
*ptr_nombreJours += (NBJOURSJUILLET - jour);
break;
case AOUT:
*ptr_nombreJours += (NBJOURSAOUT - jour);
break;
case SEPTEMBRE:
*ptr_nombreJours += (NBJOURSSEPTEMPBRE - jour);
break;
case OCTOBRE:
*ptr_nombreJours += (NBJOURSOCTOBRE - jour);
break;
case NOVEMBRE:
*ptr_nombreJours += (NBJOURSNOVEMBRE - jour);
break;
case DECEMBRE:
*ptr_nombreJours += (NBJOURSDECEMBRE - jour);
break;
default:
break;
}
unsigned short int i;
for(i = mois + 1; i < moisActuel; i++)
{
switch(i)
{
case JANVIER:
*ptr_nombreJours += NBJOURSJANVIER;
break;
case FEVRIER:
if(bissextile(annee))
{
*ptr_nombreJours += NBJOURSMOIFEBBIS;
}
else
{
*ptr_nombreJours += NBJOURSMOIFEB;
}
break;
case MARS:
*ptr_nombreJours += NBJOURSMARS;
break;
case AVRIL:
*ptr_nombreJours += NBJOURSAVRIL;
break;
case MAI:
*ptr_nombreJours += NBJOURSMAI;
break;
case JUIN:
*ptr_nombreJours += NBJOURSJUIN;
break;
case JUILLET:
*ptr_nombreJours += NBJOURSJUILLET;
break;
case AOUT:
*ptr_nombreJours += NBJOURSAOUT;
break;
case SEPTEMBRE:
*ptr_nombreJours += NBJOURSSEPTEMPBRE;
break;
case OCTOBRE:
*ptr_nombreJours += NBJOURSOCTOBRE;
break;
case NOVEMBRE:
*ptr_nombreJours += NBJOURSNOVEMBRE;
break;
case DECEMBRE:
//Inutile
break;
default:
break;
}
}
}
}
int main(int argc, char *argv[])
{
time_t secondes;
struct tm actual;
time(&secondes);
actual = *localtime(&secondes);
unsigned int anneeActuelle = actual.tm_year + 1900, moisActuel = actual.tm_mon + 1, jourActuel = actual.tm_mday;
printf("\n\n\nDate Actuelle: %d/%d/%d.\n", jourActuel, moisActuel, anneeActuelle);
printf("Date Choisie ?\n\n");
unsigned int jour = 0, mois = 0, annee = 0;
unsigned long int nombreJours = 0;
printf("\nSaisir une Annee comprise entre 1 et %u !", anneeActuelle);
do
{
printf("\nAnnee: ");
scanf("%u", &annee);
} while(annee > anneeActuelle || annee == 0); //Pas d'année dans le futur et l'année 0 n'a pas existé
printf("\nSaisir un Mois compris entre 1 et %d, et non dans le futur !", NBMOISANNEE);
do
{
printf("\nMois: ");
scanf("%u", &mois);
} while(mois > NBMOISANNEE || (annee == anneeActuelle && mois > moisActuel)); //Pas de mois dans le futur par rapport à l'année actuelle, ni mois inférieur à Janvier, ni mois supérieur à Décembre
printf("\nSaisir un Jour compris entre 1 et 28 / 29 / 30 / 31 et non dans le futur !");
do
{
printf("\nJour: ");
scanf("%u", &jour);
} while((jour > NBJOURSMOIS31 && (mois == JANVIER || mois == MARS || mois == MAI || mois == JUILLET || mois == AOUT || mois == OCTOBRE || mois == DECEMBRE)) || (jour > NBJOURSMOIS30 && (mois == AVRIL || mois == JUIN || mois == SEPTEMBRE || mois == NOVEMBRE)) || ((mois == FEVRIER && ((jour > NBJOURSMOIFEB && !bissextile(annee)) || ((jour > NBJOURSMOIFEBBIS) && bissextile(annee)))) || (annee == anneeActuelle && mois == moisActuel && jour > jourActuel)));
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(annee != anneeActuelle)
{
nombreJoursBloc1(&nombreJours, jour, mois, annee);
nombreJoursBloc2(&nombreJours, annee, anneeActuelle);
nombreJoursBloc3(&nombreJours, jourActuel, moisActuel, anneeActuelle);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
else
{
nombreJoursBloc4(&nombreJours, jour, mois, annee, jourActuel, moisActuel);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(nombreJours > 1)
{
printf("\n\nIl y a %ld jours depuis le %u/%u/%u Riri' :) \n\n\n", nombreJours, jour, mois, annee);
}
else
{
printf("\n\nIl y a %ld jour depuis le %u/%u/%u Riri' :) \n\n\n", nombreJours, jour, mois, annee);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment