Я уже публиковал этот вопрос. Однако я не был достаточно конкретным, поэтому я пытаюсь объяснить это лучше в этом посте.
В настоящее время я пишу небольшую программу для создания счетов-фактур. Счета-фактуры должны рассчитываться с учетом времени хранения предметов, например. 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 день (поскольку дата счета-фактуры имеет более раннюю дату, которая имеет более пяти дней, «бесплатные дни» уже вычитаются в этом месяце)
Пример 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 дней и нет предыдущего месяца)
Я надеюсь, что кто-то может дать мне несколько указателей или какой-нибудь код, чтобы помочь рассчитать дни. Часть, которую я нахожу сложной, заключается в том, чтобы «заглянуть» в предыдущий месяц (если он существует) с даты счета-фактуры, чтобы проверить количество дней.
Спасибо.