我之前发过这个问题。但是我不够具体,所以我想在这篇文章中更好地解释它。
我目前正在编写一个小程序来创建发票。发票应根据商品的存储时间计算,例如costPerDay * numberOfDaysInStorage
。
发票每月创建,例如InvoiceDate = 31/05/2013.
从数据库中提取项目开始日期和结束日期(存储中)。
所以,我有:
变量:
DateTime StartInStorageDate;
DateTime EndOfStorageDate;
DateTime InvoiceDate; //(always last date of month)
规则
实施例
示例1:
DateTime StartInStorageDate = 07/04/2013;
DateTime EndOfStorageDate = 08/06/2013;
DateTime InvoiceDate = 31/05/2013;
天数= 31天的计算(因为发票日期有一个日期,超过五天,“免费日”已经 在那个月减去)
示例2:
DateTime StartInStorageDate = 28/04/2013
DateTime EndOfStorageDate = 08/06/2013
DateTime InvoiceDate = 31/05/2013
天数的计算=(总共11天 - 5天“自由日”)= 6天 (因为发票日期有一个日期之前,没有5天到 在这个月末,我们必须将这几天添加到发票月份,并且 从总数中减去5“自由日”
示例3:
DateTime StartInStorageDate = 28/04/2013
DateTime EndOfStorageDate = 08/05/2013
DateTime InvoiceDate = 31/04/2013
天数的计算= 0(因为invoiceDate的时间不超过5天,并且没有一个月前)
我希望有人可以提供一些指示,或者一些代码来帮助计算天数。我觉得棘手的部分是从发票日期“调查”前一个月(如果存在),检查几天。
谢谢。
答案 0 :(得分:2)
只需要几个简单的操作:
DateTime endDate = Min(invoiceDate, endOfStorageDate ); // Min() is pseudo code
int daysInStorage = (endDate - StartInStorageDate).Days;
daysInStorage -= 5;
if (daysInStorage < 0) daysInStorage = 0;
答案 1 :(得分:0)
您需要计算两个日期:发票期间的开始和结束时间:
DateTime invoiceStart = StartInStorageDate.AddDays(5);
DateTime invoiceEnd = InvoiceDate < EndOfStorageDate ? InvoiceDate : EndOfStorageDate;
double billedDays = Math.Max(0, (invoiceEnd - invoiceStart).TotalDays);