Я ранее разместил этот вопрос. Однако я не был достаточно конкретным, поэтому я стараюсь объяснить это лучше в этом посте.Алгоритм расчета дат
В настоящее время я пишу небольшую программу для создания счетов-фактур. Счета-фактуры должны рассчитываться с учетом времени хранения элементов, например. costPerDay * numberOfDaysInStorage
.
Счет-фактура создается ежемесячно, например. InvoiceDate = 31/05/2013.
Дата начала и конечная дата элементов (в хранилище) извлекаются из базы данных.
Итак, у меня есть:
Переменные:
DateTime StartInStorageDate;
DateTime EndOfStorageDate;
DateTime InvoiceDate; //(always last date of month)
Правила
- Первые пять дней хранения всегда должны быть свободными.
- Расчет дней должен производиться только за данную дату выставления счета.
- Если дата, предшествующая InvoiceDate, существует, дни должны быть приняты , чтобы рассчитать «свободные дни». Если в течение месяца или более дней, до конца месяца, мы должны предположить, что они были рассчитаны и, следовательно, не учитывают их в счете-фактуре.
Примеры
Пример 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 дней, а не за месяц до)
Я надеюсь, что кто-то может дать мне несколько указателей, или код, чтобы помочь вычислить дней. Часть, которую я считаю сложной, заключается в том, чтобы «заглянуть» в предыдущий месяц (если таковой существует) со дня выставления счета, чтобы проверить дни.
спасибо.
Не совсем уверен, что вы хотите сделать, но похоже, что вы должны взглянуть на [TimeSpan] (http://msdn.microsoft.com/library/system.timespan.aspx) – Corak