Reputation: 85
How can I count the number of holidays from database between 2 days
I already count the number of business days but how can i minus to week days the number of holidays counted between 2 days.
Assuming that I have a Holidays
table with
Dates:
Answer should be: Business days - Holiday Number between 2 dates ;
Here's my code:
public static void GetBusinessDays(DateTime startD, DateTime endD)
{
double calcBusinessDays =
1 + ((endD - startD).TotalDays * 5 -
(startD.DayOfWeek - endD.DayOfWeek) * 2) / 7;
if (endD.DayOfWeek == DayOfWeek.Saturday) calcBusinessDays--;
if (startD.DayOfWeek == DayOfWeek.Sunday) calcBusinessDays--;
MessageBox.Show(" " + calcBusinessDays);
}
from this link :Calculate the number of business days between two dates?
Button:
private void button1_Click(object sender, EventArgs e)
{
GetBusinessDays(Convert.ToDateTime(metroDateTime1.Value.ToString("yyyy-MM-dd")), Convert.ToDateTime(metroDateTime2.Value.ToString("yyyy-MM-dd")));
}
PS: I'm new to c#
Upvotes: 0
Views: 1251
Reputation: 34160
While only
while (Start.Date <= End.Date)
{
if (Start.DayOfWeek == DayOfWeek.Saturday || Start.DayOfWeek == DayOfWeek.Sunday)
holidays++;
Start = Start.AddDays(1);
}
Could calculate the holiday count, but the code below is more efficient, as we already know that every 7 days has 2 holiday in it and don't have to go through it and only checking days % 7
(6 days at most) for holidays is enough.
int days = (int)(End - Start).TotalDays + 1;
int holidays = days / 7 * 2;
int remain = days % 7;
DateTime dt = End.AddDays(-remain);
while (dt.Date <= End.Date)
{
if (dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday)
holidays++;
dt = dt.AddDays(1);
}
int year = Start.Year;
do
{
dt = new DateTime(year, 12, 25); //is chritsmass right?
if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
dt = new DateTime(year, 7, 4); // 4th of july
if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
dt = new DateTime(year, 10, 31); // holoween
if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
year++;
} while (year <= End.Year);
int businessDays = days - holidays;
Upvotes: 1