我有一个场景,系统会在 18 个月内计算每月费用。比如说,费用是 10$ ;然后将计算 $10/18 = $0.56 每月。
如果客户在 18 个月期间中途取消服务。我需要找到他使用的月数并退还剩余的月数。例如:客户于2012年6月2日创建并于2012年8月13日取消,这意味着他完全使用了2个月,因此我需要退款($10/18)* (18-2)
。
由于这只会在几年的范围内需要 - 我会手动构建每个月初的 time_t 值的查找表。
然后记录他们启动服务的 time_t,现在检查 time_t 然后扫描表中的值的数量。
ps. time_t is the 'C' stdlib basis for time functions, it's the number of seconds since 1970 and is used by all the functions in time.h
您可以创建一个方法来计算它,但是更好的方法是编写一个 ADT 来表示一个日期对象,该对象应该自己完成所有计算
int chargeFor(int createdD,int createdM,int createdY,int canceledD,int canceledM,int canceledY){
int deltaD = canceledD - createdD;
int deltaM = canceledM - createdM;
int deltaY = canceledD - createdD;
if( deltaD != 0 )
return result = deltaY * 12 + deltaM + 1;
else
return result = deltaY * 12 + deltaM;
}
如果我理解正确,您想计算两个日期之间的整月数......所以算法可以是这样的:
curDate = fromDate;
curDate.month++;
totMonths = 0;
while (curDate < fromDate) {
totMonths++;
if (curDate.month == 12) {
curDate.month = 1;
curDate.year++;
} else curDate.month++;
}