int getDaysBetween(string date1, string date2) {
int time1, y1, m1, d1;
int time2, y2, m2, d2;
//输入格式如:20120101、20221223
if(!date1.empty() && !date2.empty()){
time1 = stoi(date1);
time2 = stoi(date2);
if(time1 > time2) swap(time1, time2);
//分离年月日
y1 = time1 / 10000, m1 = time1 / 100 % 100, d1 = time1 % 100;
y2 = time2 / 10000, m2 = time2 / 100 % 100, d2 = time2 % 100;
return rdn(y2, m2, d2) - rdn(y1, m1, d1);
}
return 0;
}
int rdn(int y, int m, int d) { /* Rata Die day one is 0001-01-01 */
if (m < 3)
y--, m += 12;
return 365*y + y/4 - y/100 + y/400 + (153*m - 457)/5 + d - 306;
}
将日期转换为整数,表示自一个纪元以来的天数,然后减去。在这个例子中,我选择了Rata Die,可以在[http://mysite.verizon.net/aesir\_research/date/rata.htm](http://mysite.verizon.net/aesir_research/date/rata.htm)上找到算法的解释。