count days including weekend

M

Mike

I have a routine that's calculating business days but its not counting the
weekend days that are between the start date and end date. If my start date
is 9/26/08 and my end date is 10/01/08, I should see 4 business days and 2
weekend days.

How can I get that result? I'm getting 4 business days but its not counting
the weekend days?
 
C

CSharper

I have a routine that's calculating business days but its not counting the
weekend days that are between the start date and end date. If my start date
is 9/26/08 and my end date is 10/01/08, I should see 4 business days and 2
weekend days.

How can I get that result? I'm getting 4 business days but its not counting
the weekend days?

here is a simple code I wrote

static void Main(string[] args)
{
DateTime st = DateTime.Parse("01/01/2008");
DateTime et = DateTime.Parse("01/10/2008");
DateTime dt = st;
int weekend =0;
int weekdays = 0;
while (dt < et)
{
Console.WriteLine("Day of the week {0}",
dt.DayOfWeek);
int temp = ((dt.DayOfWeek == DayOfWeek.Saturday) ||
(dt.DayOfWeek == DayOfWeek.Sunday)) ? weekend++ : weekdays++;
dt = dt.AddDays(1);
}
Console.Read();
}
 
M

Mike

I tried your code snippet and its not working, If I enter in "09/26/2008"
and "10/01/2008" it returns 1 weekend day, it should be 2.

I have a routine that's calculating business days but its not counting the
weekend days that are between the start date and end date. If my start
date
is 9/26/08 and my end date is 10/01/08, I should see 4 business days and 2
weekend days.

How can I get that result? I'm getting 4 business days but its not
counting
the weekend days?

here is a simple code I wrote

static void Main(string[] args)
{
DateTime st = DateTime.Parse("01/01/2008");
DateTime et = DateTime.Parse("01/10/2008");
DateTime dt = st;
int weekend =0;
int weekdays = 0;
while (dt < et)
{
Console.WriteLine("Day of the week {0}",
dt.DayOfWeek);
int temp = ((dt.DayOfWeek == DayOfWeek.Saturday) ||
(dt.DayOfWeek == DayOfWeek.Sunday)) ? weekend++ : weekdays++;
dt = dt.AddDays(1);
}
Console.Read();
}
 
M

Mike

I'm trying this which I found online some time back:
public void AddWeekdays(DateTime start, int days)
{
try
{
if (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek ==
DayOfWeek.Sunday)
{

}
else
{
int remainder = days % 5;
int weekend = (5 / days) *2;

DateTime end = start.AddDays(remainder);
if (end.DayOfWeek == DayOfWeek.Saturday)
{
end = end.AddDays(2);
}
else if (end.DayOfWeek < start.DayOfWeek)
{
end = end.AddDays(2);
}
txtWDays.Value = weekend.ToString();
txtCDates.Text = end.AddDays(days + weekend -
remainder).ToShortDateString();
}

}
catch (Exception ex)
{
}
}
 
C

CSharper

Can you post your code?

When I ran the same code changing the date to what you specified I got
3 weekdays and 2 weekends. This is what I changed

static void Main(string[] args)
{
DateTime st = DateTime.Parse("09/26/2008");
DateTime et = DateTime.Parse("10/01/2008");
DateTime dt = st;
int weekend =0;
int weekdays = 0;
while (dt < et)
{
Console.WriteLine("Day of the week {0}",
dt.DayOfWeek);
int temp = ((dt.DayOfWeek == DayOfWeek.Saturday) ||
(dt.DayOfWeek == DayOfWeek.Sunday)) ? weekend++ : weekdays++;
dt = dt.AddDays(1);
}
Console.WriteLine("Weekdays {0} and Weekends {1}",
weekdays, weekend);
Console.Read();
}
 
C

CSharper

I'm trying this which I found online some time back:
public void AddWeekdays(DateTime start, int days)
    {
        try
        {
            if (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek ==
DayOfWeek.Sunday)
            {

           }
           else
            {
                int remainder = days % 5;
                int weekend = (5 / days) *2;

                DateTime end = start.AddDays(remainder);
                if (end.DayOfWeek == DayOfWeek.Saturday)
                {
                    end = end.AddDays(2);
                }
                else if (end.DayOfWeek < start.DayOfWeek)
                {
                    end = end.AddDays(2);
                }
                txtWDays.Value = weekend.ToString();
                txtCDates.Text = end.AddDays(days + weekend -
remainder).ToShortDateString();
            }

        }
        catch (Exception ex)
        {
        }
    }

If you still want to use your code logic, you need change the code
like the following

public void AddWeekdays(DateTime start, int days)
{
try
{
if (start.DayOfWeek == DayOfWeek.Saturday ||
start.DayOfWeek ==
DayOfWeek.Sunday)
{
}
else
{
int remainder = days % 5;
int weekend = ( days / 5) *2; // change here
DateTime end = start.AddDays(remainder);
if (end.DayOfWeek == DayOfWeek.Saturday)
{
end = end.AddDays(2);
}
else if (end.DayOfWeek < start.DayOfWeek)
{
end = end.AddDays(2);
}
txtWDays.Value = weekend.ToString();
txtCDates.Text = end.AddDays(days - weekend -
remainder).ToShortDateString(); //change here
}
}
catch (Exception ex)
{
}
}

Try this code and let me know if it works.
 
I

Ignacio Machin ( .NET/ C# MVP )

I tried your code snippet and its not working, If I enter in "09/26/2008"
and "10/01/2008" it returns 1 weekend day, it should be 2.


I have a routine that's calculating business days but its not counting the
weekend days that are between the start date and end date. If my start
date
is 9/26/08 and my end date is 10/01/08, I should see 4 business days and 2
weekend days.
How can I get that result? I'm getting 4 business days but its not
counting
the weekend days?

here is a simple code I wrote

static void Main(string[] args)
{
DateTime st = DateTime.Parse("01/01/2008");
DateTime et = DateTime.Parse("01/10/2008");
DateTime dt = st;
int weekend =0;
int weekdays = 0;
while (dt < et)
{
Console.WriteLine("Day of the week {0}",
dt.DayOfWeek);
int temp = ((dt.DayOfWeek == DayOfWeek.Saturday) ||
(dt.DayOfWeek == DayOfWeek.Sunday)) ? weekend++ : weekdays++;
dt = dt.AddDays(1);
}
Console.Read();
}

I think that you would have to iterate.
I have a req. to count the business days in a month.This is the code
I'm using:
static int BusinessDaysInMonth(DateTime dt) {
DateTime startDate = dt.AddDays(1 - dt.Day); //make
sure we are on day 1 of the month
int days = 1;
while (startDate.Month == dt.Month) {
if ((startDate.DayOfWeek != DayOfWeek.Saturday) &&
(startDate.DayOfWeek != DayOfWeek.Sunday))
days++;
startDate = startDate.AddDays(1);
}
return days;
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top