循环运行一周,不要选择周末

时间:2012-12-10 15:11:09

标签: c# asp.net asp.net-mvc

因此,用户可以从2个日历中选择2个不同的日期,开始日期和结束日期,当他们点击add时,包括所选日期在内的日期将添加到数据库中,每个日期作为单独记录。

这样可以正常工作,但我不希望将周末添加到数据库中。

我已更新了datepicker http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/datePickerCustomCellRender.html的用户界面 但是如果用户选择fri-mon,例如fri,sat,sun and mon将被添加到数据库中。 如果datyofweek不是星期六或星期日,我试图只运行代码

 public ActionResult listHolidays(Holiday holiday, int? PersonId, string HolidayDate, string endDate)
        {
            DateTime startDates = Convert.ToDateTime(HolidayDate),
                     endDates = Convert.ToDateTime(endDate);

            while (startDates <= endDates)
            {
                if (startDates.DayOfWeek != DayOfWeek.Saturday || startDates.DayOfWeek != DayOfWeek.Sunday)
                {
                    Holiday holiday1 = new Holiday();
                    holiday1.PersonId = PersonId.Value;
                    holiday1.HolidayDate = startDates;

                    db.Holidays.AddObject(holiday1);
                    db.SaveChanges();


                     startDates = startDates.AddDays(1);
                }
            }

            return RedirectToAction("Index");
        }

任何帮助? 感谢

4 个答案:

答案 0 :(得分:5)

您需要使用AND代替OR:

if (startDates.DayOfWeek != DayOfWeek.Saturday && startDates.DayOfWeek != DayOfWeek.Sunday)

您目前的状况将永远如此。如果startDatesDayOfWeek.Saturday,则不是DayOfWeek.Sunday,反之亦然。

之后,您需要将startDates = startDates.AddDays(1);放在if之外。

否则,您将拥有无限循环,因为只要startDatesDayOfWeek.Saturday,它就不会再增加。

答案 1 :(得分:2)

更改

if (startDates.DayOfWeek != DayOfWeek.Saturday || startDates.DayOfWeek != DayOfWeek.Sunday)

if (startDates.DayOfWeek != DayOfWeek.Saturday && startDates.DayOfWeek != DayOfWeek.Sunday)

然后你需要移动这一行

startDates = startDates.AddDays(1);

if块之外(如果日期是周末日期,则startDates变量永远不会改变。)

答案 2 :(得分:1)

如果陈述错误并且日期增加在错误的地方。

            while (startDates <= endDates)
            {
                if (startDates.DayOfWeek != DayOfWeek.Saturday **&&** startDates.DayOfWeek != DayOfWeek.Sunday)
                {
                    Holiday holiday1 = new Holiday();
                    holiday1.PersonId = PersonId.Value;
                    holiday1.HolidayDate = startDates;

                    db.Holidays.AddObject(holiday1);
                    db.SaveChanges();



                }

                **startDates = startDates.AddDays(1);**
            }

答案 3 :(得分:1)

作为您计算选择的工作天数的替代解决方案

List<DateTime> allDates = New List<DateTime>();
for (DateTime date = startingDate; date <= endingDate; date = date.AddDays(1))
    allDates.Add(date);
var days = allDates.Where(x => x.IsWeekday()).Count();

使用以下DateTime扩展程序。

public static class DateTimeExtensions
{
  public static bool IsWeekday(this DateTime dt)
  {
   return dt.DayOfWeek != DayOfWeek.Sunday && dt.DayOfWeek != DayOfWeek.Saturday;
  }
}

根据我的评论,如果是假日系统,您可以将其扩展为IsWorkday并加入一些逻辑以检查当天是否是银行假日。