Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <iostream>
- //https://stackoverflow.com/questions/9987562/determining-the-difference-between-dates
- struct Date
- {
- int d, m, y;
- };
- int daysTill(int month)
- {
- int days=0;
- switch(month)
- {
- case 1: days=0; break;
- case 2: days=31; break;
- case 3: days=59; break;
- case 4: days=90; break;
- case 5: days=120; break;
- case 6: days=151; break;
- case 7: days=181; break;
- case 8: days=212; break;
- case 9: days=243; break;
- case 10:days=273; break;
- case 11:days=304; break;
- case 12:days=334; break;
- }
- return days;
- }
- int daysDiff(Date d1, Date d2)
- {
- int dd1=0;
- int dd2=0;
- int y=0;
- int yref=0;
- yref=((d1.y<d2.y) ? d1.y : d2.y);
- for(y=yref;y<d1.y;y++)
- if(__isleap(y))dd1++;
- if(__isleap(d1.y) && d1.m>2) dd1++;
- dd1+=((daysTill(d1.m) + d1.d)+((d1.y - yref) * 365));
- for(y=yref;y<d2.y;y++)
- if(__isleap(y))dd2++;
- if(__isleap(y) && d2.m>2)dd2++;
- dd2+=((daysTill(d2.m) + d2.d)+((d2.y - yref) * 365));
- return abs(dd2-dd1);
- }
- int main()
- {
- Date d1, d2;
- printf(
- "\n\tDigite duas datas no formato DD/MM/YYYY"
- "\n\n\tDigite data1: "
- );
- scanf("%d/%d/%d",&d1.d,&d1.m,&d1.y);
- printf(
- "\n\tDigite data2: "
- );
- scanf("%d/%d/%d",&d2.d,&d2.m,&d2.y);
- int dias(daysDiff(d1,d2)); // diferença entre datas em dias contando anos bisextos
- int idade(dias/365); //idade em anos
- int qtd_dias((dias%365)%30);
- int qtd_meses((dias%365)/30); //Digite data1: 29/03/1987 Digite data1: 21/12/2017 equivalen a 30 anos 9 meses e 18 dias
- int meses_totais(dias/30);
- int qtd_semanas(dias/7); // qtd semanas total dos dias
- int horas(dias*24); // qtd horas total dos dias
- int minutos(horas*60); // qtd minutos total dos dias
- int segundos(minutos*60); // qtd segundos total dos dias
- /*
- * esta forma de calcular só deve ser usada se o
- * usuario entrar com as horas de nascimento.
- int segs(dias*86400);
- int horas(segs/3600);
- int minutos((segs-(horas*3600))/60);
- int segundos((segs - (horas * 3600)) - (minutos * 60));
- */
- printf(
- "\n\t%d ano(s) %d mes(es) e %d dia(s) de vida"
- "\n\t%d horas"
- "\n\t%d minutos"
- "\n\t%d segundos"
- "\n\t%d mes(es)"
- "\n\t%d dia(s)"
- "\n\t%d semana(s)\n\n",
- idade,
- qtd_meses,
- qtd_dias,
- horas,
- minutos,
- segundos,
- meses_totais,
- dias,
- qtd_semanas
- );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment