#include<stdio.h>
#include<conio.h>
#include<dos.h>
int datecmp(struct date,struct date);
int leap(int);
void main()
{
struct date a,b;
int leep;
clrscr();
b.da_year=2000;
b.da_mon=7;
b.da_day=1;
getdate(&a);
printf("%u\t%u\t%u\t",b.da_day,b.da_mon,b.da_year);
printf("\n%u\t%u\t%u\t",a.da_day,a.da_mon,a.da_year);
datecmp(a,b);
/*if((leep=leap(b.da_year))==1)
printf("\nThe year is leep year");
else
printf("\nThe year is an ordinary year");*/
getch();
}
int datecmp(struct date a,struct date b)
{
struct date c;
char days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int y=365;
int i,j;
int td=0;
c.da_year=a.da_year-b.da_year;
c.da_mon=a.da_mon-b.da_mon;
if(c.da_year==0)//SAME YEAR BUT DIFFERENT MONTH OR SAME MONTH
{
if(c.da_mon==0)
td=a.da_day-b.da_day;
else
{
for(i=0,j=b.da_mon;i<(c.da_mon-1);i++,j++)
td+=days[j];
td+=days[b.da_mon-1]-b.da_day;
td+=a.da_day-1;
}
}
else if(c.da_year>1 && c.da_mon>1)//YEAR DIFF B/W TWO INPUTS IS >THAN 1 YEAR
{
if(b.da_mon<3 && leap(b.da_year)==1)
td=1;
else
td=0;
for(i=0,j=b.da_year+1;i<(c.da_year);i++,j++)
td=td+365+leap(j);
if(c.da_mon==0)
td+=a.da_day-b.da_day;
else
{
for(i=0,j=b.da_mon;i<(c.da_mon-1);i++,j++)
td+=days[j];
td+=days[b.da_mon-1]-b.da_day;
td+=a.da_day-1+leap(a.da_year);
}
}
else if(c.da_year==1)//YEAR DIFF B/W TWO INPUTS IS==1 YEAR
{
if(c.da_mon>0)
{
if(b.da_mon>1 && leap(b.da_year)==1)
td=1;
else
td=0;
for(i=0,j=b.da_year+1;i<(c.da_year);i++,j++)
td=td+365+leap(j);
if(c.da_mon==0)
td+=a.da_day-b.da_day;
else
{
for(i=0,j=b.da_mon;i<(c.da_mon-1);i++,j++)
td+=days[j];
td+=days[b.da_mon-1]-b.da_day;
td+=a.da_day-1+leap(a.da_year);
}
}
else if(c.da_mon==0 && c.da_day>0)
{
if(b.da_mon>1)
td=0;
else
td=1;
for(i=0,j=b.da_year+1;i<(c.da_year);i++,j++)
td=td+365+leap(j);
td+=a.da_day-b.da_day;
}
}
else if(c.da_year==1)
{
}
printf("\n The days are %d",td);
getch();
}
int leap(int year)//LEAP YEAR FUNCTION
{
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
return(1);
else
return(0);
}
else
return(1);
}
else
return(0);
}
Cheers,
Bragaadeesh.
6 comments:
thanks a lot... it s working... it saved much of my time.. it exactly matched my application...think u r an alumni of psg tech. me too...
Great to hear it worked out for you.. :)
hi i have seen ur program code for diff. between 2 dates but it is not working for year greater than 2011 like i have given date as 23/09/2011 and 23/09/2012 it is not working and giving total dauys as 0
i have change the code in line 47 as else if(c.da_year>1 && c.da_mon>=0)//YEAR DIFF B/W TWO INPUTS IS >THAN 1 YEAR
but then also it doesnot work since the value of c.da_year is negative when year is taken more than 2011.pls help me out.
and yes one i want to know why we divide year with 400 and 100 for a leap year i have read only about dive by 4.pls sned the answer
i will b thank ful to you
http://www.infoplease.com/spot/leapyear1.html
Check this link for the reason why it s been divided by 400.
hey come on... u hav got some start. a template of the code is available. u need to make necessary changes to make it work perfect..
Post a Comment