home *** CD-ROM | disk | FTP | other *** search
-
- /* days() is hereby placed in the public domain
- Alan Coates 17 JUN 1984
-
- The function accepts a 6 digit ASCII argument ddmmyy
- and returns a (long) number of days from 1.1.1900,
- corrected for leap years up to 31.12.2099
-
- */
-
- #include "local.h" /* from Thomas Plum, or use "libc.h" */
-
-
- long days(date)
- char date[];
- {
- int dd,mm,dmax;
- long daytot,yy;
- char *s;
- dd = mm = yy = 0;
- for(s = date;s < date+2 && isdigit(*s); )
- dd = dd*10 + *(s++) -48;
- for(s = date + 2;s < date+4 && isdigit(*s); )
- mm = mm*10 + *(s++) -48;
- for(s = date + 4 ;s < date+ 6 && isdigit(*s); )
- yy = yy*10 + *(s++) -48;
- daytot = dd;
- /* add months, correct for time of year */
- daytot += 30*(mm - 1);
- switch (mm)
- {
-
- case 2:
- if (!((yy-4)%4))
- dmax = 29;
- else
- dmax = 28;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- dmax = 30;
- break;
- default:
- dmax = 31;
- break;
- }
- if (dd <1 || dd > dmax)
- remark("bad day ",dd);
- switch (mm)
- {
- case 1:
- case 4:
- case 5:
- daytot += 0; /* no correction */
- break;
- case 3:
- daytot -= 1;
- break;
- case 2:
- case 6:
- case 7:
- daytot += 1;
- break;
- case 8:
- daytot += 2;
- break;
- case 9:
- case 10:
- daytot += 3;
- break;
- case 11:
- case 12:
- daytot += 4;
- break;
- default:
- remark("Bad month",mm);
- break;
- }
- /* add for completed years */
- daytot += 365*yy;
- /* correct within a leap year iff after Feb 29 */
- if(mm > 2 && yy%4 == 0 && yy > 0)
- daytot += 1;
- /* correct for elapsed leap years */
- daytot += (yy-1)/4;
- return(daytot);
- }
- remark(s1,x)
- char s1[] ;
- int x;
- {
- printf("%s %d\n",s1,x);
- return;
- }
-