Hi...
I need to count the number of days between 2 dates.
From a previous example in the notes I managed to come up with the following code which gives you the number of days but first converting the date to a julian date. Is there any other way of doing this? Plus...how do I go about if I want it to specify the exact number of years, months and days? Any ideas? Just ideas?Thanx.
Code:
void read_date(int *dd, int *mm, int *yyyy) {
int i;
while(1) {
printf("Enter date (DD MM YYYY): ");
i = scanf("%d %d %d", dd, mm, yyyy);
if(i == 3) {
if((*mm < 1) || (*mm > 12)) {
printf("MM must be between 1 and 12\n");
continue;
}
if((*dd < 1) || (*dd > days_month[*mm-1])) {
printf("DD must be between 1 and %d for the month of %s\n", days_month[*mm-1], months[*mm-1]);
continue;
}
if((*yyyy < 1) || (*yyyy > 9999)) {
printf("YYYY must be between 0 and 9999\n");
continue;
}
} else {
continue;
}
break;
}
}
int leap_year(int yyyy)
{
return((yyyy % 400 == 0) || (yyyy % 4 == 0 && yyyy % 100 != 0));
}
int convert_to_jdate(int dd, int mm, int yyyy)
{
int total_days = 0;
if (yyyy < 1) return -1;
total_days = (yyyy-1) * 365;
total_days += (yyyy-1) / 4;
total_days -= (yyyy-1) / 100;
total_days += (yyyy-1) / 400;
total_days += cumulative_days[mm-1];
total_days += dd;
if(leap_year(yyyy))
if (mm > 2)
total_days++;
return total_days;
}
/*********************************************************************************************************/
void date()
{
int dd1, mm1, yyyy1;
int dd2, mm2, yyyy2;
int t1, t2, t_total;
read_date(&dd1, &mm1, &yyyy1);
read_date(&dd2, &mm2, &yyyy2);
t1 = convert_to_jdate(dd1, mm1, yyyy1);
t2 = convert_to_jdate(dd2, mm2, yyyy2);
t_total = t1 - t2;
if(t_total < 0) {
t_total *= -1;
}
printf("There are %d day(s) between the two dates\n", t_total);
return;
}
[code tags added by ygfperson]