我以前发布过这个问题。但是我不够具体,所以我试图在这篇文章中更好地解释它。
我目前正在编写一个小程序来创建发票。发票应根据物品的存储时间计算,例如costPerDay * numberOfDaysInStorage
。
发票是按月创建的,例如InvoiceDate = 31/05/2013.
从数据库中提取项目的开始日期和结束日期(存储中)。
所以我有:
变量:
DateTime StartInStorageDate;
DateTime EndOfStorageDate;
DateTime InvoiceDate; //(always last date of month)
规则
- 存储的前五天应该始终是免费的。
- 天数的计算,应仅针对给定的发票日期进行。
- 如果存在 InvoiceDate 之前的日期,则应考虑天数,以便计算“空闲天数”。如果前一个月日期有 5 天或更多天,到其月末,我们必须假设这些已经计算,因此在发票月份中不考虑它们。
例子
示例 1:
DateTime StartInStorageDate = 07/04/2013;
DateTime EndOfStorageDate = 08/06/2013;
DateTime InvoiceDate = 31/05/2013;
天数计算 = 31 天(因为发票日期早于一个日期,超过 5 天,因此当月已减去“空闲天数”)
示例 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 天,并且没有一个月前)
我希望有人可以为我提供一些指针,或者一些代码来帮助计算天数。我觉得棘手的部分是从发票日期开始“查看”上个月(如果存在),以检查天数。
谢谢你。