Reputation: 317
I want to know the working days when I choose the date in this grid. I tried JavaScript code that works but I have some difficulty using it in C#.
string startdate, enddate;
startdate = "";
enddate = "";
foreach (GridViewRow row in DateGrid.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.Cells[0].FindControl("DateChBox") as CheckBox);
if (chkRow.Checked)
{
startdate = row.Cells[2].Text;
enddate = row.Cells[3].Text;
// Validate input
if (enddate < startdate)
return 0;
// Calculate days between dates
var millisecondsPerDay = 86400 * 1000; // Day in milliseconds
startdate.setHours(0, 0, 0, 1); // Start just after midnight --> how to do this in c#?
enddate.setHours(23, 59, 59, 999); // End just before midnight --> how to do this in c#?
var diff = enddate - startdate; // Milliseconds between datetime objects
var days = Math.Ceiling(diff / millisecondsPerDay);
// Subtract two weekend days for every week in between
var weeks = Math.Floor(days / 7);
days = days - (weeks * 2);
//// Handle special cases --> this is not necessary because I choose the date
//var startDay = startdate.getDay();
//var endDay = enddate.getDay();
// Remove weekend not previously removed.
if (startDay - endDay > 1)
days = days - 2;
// Remove start day if span starts on Sunday but ends before Saturday
if (startDay == 0 && endDay != 6) {
days = days - 1;
}
// Remove end day if span ends on Saturday but starts after Sunday
if (endDay == 6 && startDay != 0) {
days = days - 1;
}
I need some help to use it in C# if it is possible.
Upvotes: 1
Views: 985
Reputation: 1185
First, convert your dates in dateformat, and loop from startdate
to endday
.
Then you can do this:
if (!(toValidate.DayOfWeek == DayOfWeek.Sunday || toValidate.DayOfWeek == DayOfWeek.Saturday))
{
// do your logic
}
UPDATE
int countWorkingDays = 0;
string startdate1 = "2014/04/28";
string enddate1 = "2014/09/12";
DateTime startdate = DateTime.ParseExact(startdate1, "yyyy/MM/dd",System.Globalization.CultureInfo.InvariantCulture);
DateTime enddate = DateTime.ParseExact(enddate1, "yyyy/MM/dd",System.Globalization.CultureInfo.InvariantCulture);
DateTime date = startdate;
while (date <= enddate)
{
if (!(date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday))
{
countWorkingDays++;
}
date = date.AddDays(1);
}
Console.WriteLine("WorkingDays " + countWorkingDays);
Upvotes: 2
Reputation: 99
for (DateTime date = Start_Date; date <= End_Date; date = date.AddDays(1))
{
if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
{
yield return date;
}
}
removes weekends from date range.
Upvotes: 0