Related Topics
No topics are associated with this blog
Figuring out how many days there are between two dates is either built in to the system you are using or else you will tear your hair out what with leap years, floating leap days, etc.
There are two ways to do this fairly simply:
Julian Date Counts
Julian Date Counts are not related to Julius Caesar's calendar. They are a way to assign a sequential number to every date going way back into antiquity. Convert any two dates to their Julian Date Count number and the difference is the number of days between the dates.
In C++ ...
long int GregorianToJulian(int gregorianMonth, int gregorianDay, int gregorianYear) { // this function calculates the Julian Date Number from a Gregorian date // // astronomers and others use these numbers becasue the difference between two // Julian Date Numbers is the number of days between the dates // // see https://quasar.as.utexas.edu/BillInfo/JulianDatesG.html long int A; long int B; long int C; long int E; long int F; long int JD; long int Y, M, D; Y = gregorianYear; M = gregorianMonth; D = gregorianDay; if (M <= 2) { Y = Y - 1; M = M + 12; } A = Y/100; B = A/4; C = 2-A+B; E = 365.25*(Y+4716); F = 30.6001*(M+1); JD= C+D+E+F-1524.5; return JD; } void JulianToGregorian (long int julianDateNumber, int& gregorianMonth, int& gregorianDay, int& gregorianYear) { // Convert a Julian Date Number to a Gregorian Date // // see https://quasar.as.utexas.edu/BillInfo/JulianDatesG.html long int Z; long int W; long int X; long int A; long int B; long int C; long int D; long int E; long int F; Z = julianDateNumber+0.5; W = (Z - 1867216.25)/36524.25; X = W/4; A = Z+1+W-X; B = A+1524; C = (B-122.1)/365.25; D = 365.25*C; E = (B-D)/30.6001; F = 30.6001*E; gregorianDay = B-D-F; gregorianMonth = ((E-1) > 12) ? E-13 : E-1; gregorianYear = (gregorianMonth>2) ? C-4716 : C-4715; return; }
Using the system clock functions
Again in C++ ...
/* Find the days between two dates Found at https://stackoverflow.com/questions/1381832/how-to-calculate-the-number-of-days-between-two-given-dates-leap-year-obstacle and https://www.cplusplus.com/reference/clibrary/ctime/mktime/ The sources were helpful but I had to extensively modify/hack to make this actually work */ #include <time.h> #define SECONDS_PER_DAY (24 * 60 * 60) time_t time_from_date(int year, unsigned int month, unsigned int day) { // Return the time from the year 1900 to the date entered struct tm a = {0,0,0,day,month - 1,year - 1900}; time_t x = mktime(&a); return x; } int days_between(int year0, unsigned month0, unsigned day0, int year1, unsigned month1, unsigned day1) { // The difference in seconds between two dates, // divided by the number of seconds in a day ... // // is the number of days between the dates return difftime(time_from_date(year1, month1, day1), time_from_date(year0, month0, day0)) / SECONDS_PER_DAY; }
(my thanks to https://centricle.com/tools/html-entities/ for HTML encoding)
Originally published: Sunday, September 13, 2009; most-recently modified: Monday, June 04, 2012