Wednesday, May 12, 2010

How to find number of days and difference between to dates using C


int count=-1,nofdays=-1,nofmonths=-1,nofyears=-1,lastmonthmaxday;
int main()
{
printf("This program will ask for two date values in the formate of DD-MM-YYYY and produces the number of days between the two dates also if those dates are your birth date and some later date then it will display your age till the later date.This will not validate for any wrong entry for days(like more than 30-31) and months(like more than 12).However if you enter,you will get some unexpected result. If you need, with a few changes and little affords you can achieve your requirements.\n");
int day1,day2,month1,month2,year1,year2,day11,month11,year11,year,month,day,maxdays,flag=0;
static int z=1;
printf("Enter the privous date (DD) \n");
scanf("%d",&day1);
printf("Enter the privous month (MM) \n");
scanf("%d",&month1);
printf("Enter the privous year,for not being ambiguous input plz enter in YYYY format,else it will be a y2k bug\n");
scanf("%d",&year1);
printf("Enter the later date (DD)\n");
scanf("%d",&day2);
printf("Enter the later month (DD)\n");
scanf("%d",&month2);
printf("Enter the later year,for not being ambiguous input plz enter in YYYY format,else it will be a y2k bug\n");
scanf("%d",&year2);
day11=day1;month11=month1;year11=year1;lastmonthmaxday=checkmonth(month2-1,year2);
for(year=year11;year<=year2;year++) { for(month=month11;month<=12;month++) { if(year==year2 && month==month2) { flag=0;lastmonthmaxday=day2;countday(day11,day2,flag); break; } else { maxdays=checkmonth(month,year); countday(day11,maxdays,flag);flag=1;day11=1; } } month11=1; nofyears++; } if(month2<=month1 && nofyears !=0) { --nofyears; } if((day2<=day1 && nofmonths !=0) || nofmonths==12 ) { if(nofmonths==12){ nofyears++; nofmonths=0; } else --nofmonths; } maxdays=checkmonth(month2-1,year2); if(nofdays>=maxdays)
nofdays=nofdays-maxdays;
printf("The total number of days are : %d \nYou are %d year %d months %d days older\n",count,nofyears,nofmonths,nofdays);
return 0;
}
//This function will start from the previous date and keep on counting each day as long as it come to the later date.
void countday(int ddin, int ddfnl,int flg)
{
int i,day1,day2=35;
static int x=1,y=1;
for(i=ddin;i<=ddfnl;i++) { count++; if(flg==0 && i<=lastmonthmaxday) { if(lastmonthmaxday>ddfnl && x==1)
{
nofdays=nofdays+(lastmonthmaxday-ddfnl);
x++;
}
nofdays++;
if(y==1)
day1=ddin;
else if(y==2)
day2=ddfnl;
y++;
if(day1>day2)
{
break;
}
}
}
nofmonths++;
if(nofmonths==13)
nofmonths=1;
}
int checkmonth(int month,int year)
{
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12 || month==0) //These are the months having 31 days
return 31;
else if(month==4 || month==6 || month==9 || month==11) //These are the months having 30 days
return 30;
else if(month==2) //This is for february only
{
if((year%400==0) || (year%4==0 && year%100!=0)) //This is for checking a leap year
return 29;
else
return 28;
}
}





Delicious add to del.icio.us saved by 0 users

0 comments:

Post a Comment

 

Never feel bad if u loose some thing or do not get expected because "There is always a better option"