日历以不同频率重复

时间:2012-07-07 06:05:28

标签: c# asp.net

我有一个ASP.Net日历功能,允许用户添加事件和 配置它们是否以不同的频率重复(即每天, 每周,每月,周六/周日等)。我正在寻找的是一些C#代码 将根据开始日期计算“每隔一周”的日期 结束日期。

示例:如果用户输入了2012年7月7日的活动并希望如此 每隔一周重复一次,直到2012年7月31日,代码将返回 以下日期:

2012年7月7日 2012年7月14日 2012年7月21日 2012年7月28日

还有一个功能就是选择星期几(即星期一,星期二,星期三......)。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

DateTime date = new Date(2005, 10, 03);
List<DateTime> dates = new List<DateTime>();
do
{
   var newDate = date.Add(7);  
   dates.Add(newDate);
}While(newDate.Month == 10)

答案 1 :(得分:0)

您可能想要一个带有两个DateTime对象(开始日期和结束日期)的函数以及事件之间的一些间隔。然后,您可以使用DateTime.AddDays(double value)函数生成所有中间日期。为了得到每隔一周,你的间隔时间是14.你会在你的结束日期之后继续增加14天。

//Create a list of DateTimes including the start date, with the specified
//number of days in between each item in the list.
public static IList<DateTime> GetRepeatingEvents(DateTime start, DateTime end, int intervalInDays)
{
  List<DateTime> allEvents = new List<DateTime>();
  allEvents.Add(start); //Make sure the start date is included in the list of dates!

  var tempDate = start;
  while (tempDate <= end) //Less than or Equals means the end date will be added as well
  {
    tempDate = tempDate.AddDays(intervalInDays);
    allEvents.Add(tempDate);
  }
  return allEvents;
}

如果您的开始日期和结束日期也包含时间组件,则需要小心。例如,如果:

  • 您的开始日期是2012年7月7日上午10:30
  • 您的结束日期是2012年7月28日上午9:00
  • 您的间隔为一周(7天)

然后上面的函数将不包括列表中的7月28日,因为7月7日上午10:30之后的21天是7月28日上午10:30,这将不满足while(tempDate <= end)中的条件,因为结束发生在9 :00:00

答案 2 :(得分:0)

    if (DrpEvRepeats.SelectedValue == "Weekly")
    {
        int Weekly = Convert.ToInt32(DrpRptWeekly.SelectedValue);
        TimeSpan WeeklyDifference = Convert.ToDateTime(txtWeeklyEnd.Text.Substring(6, 4) + "/" + txtWeeklyEnd.Text.Substring(3, 2) + "/" + txtWeeklyEnd.Text.Substring(0, 2) + " " + drpHHEnd.SelectedValue + ":" + drpMMEnd.SelectedValue) - Convert.ToDateTime(txtStartDate.Text.Substring(6, 4) + "/" + txtStartDate.Text.Substring(3, 2) + "/" + txtStartDate.Text.Substring(0, 2) + " " + drpHHStart.SelectedValue + ":" + drpMMStart.SelectedValue);
        foreach (RepeaterItem rpI in rptEvRepeat.Items)
        {
            for (int i = 0; i <= Convert.ToInt32((Convert.ToInt32(WeeklyDifference.TotalDays)) / 7); i += Weekly)
            {
                DataRow objDR = dtEvRepeat.NewRow();
                objDR["SrNo"] = "";

                //string rptOn = "";
                //for (int j = 0; j < chkRptOn.Items.Count; j++)
                //{
                //    if (chkRptOn.Items[j].Selected)
                //        rptOn += chkRptOn.Items[j].Value + ",";
                //}
                //rptOn = rptOn.TrimEnd(',');

                if (txtStartDate.Text != "")
                    objDR["StartDate"] = Convert.ToDateTime(txtStartDate.Text.Substring(6, 4) + "/" + txtStartDate.Text.Substring(3, 2) + "/" + txtStartDate.Text.Substring(0, 2) + " " + drpHHStart.SelectedValue + ":" + drpMMStart.SelectedValue).AddDays(i * 7);
                else
                    objDR["StartDate"] = "";

                if (txtEndDate.Text != "")
                    objDR["EndDate"] = Convert.ToDateTime(txtEndDate.Text.Substring(6, 4) + "/" + txtEndDate.Text.Substring(3, 2) + "/" + txtEndDate.Text.Substring(0, 2) + " " + drpHHEnd.SelectedValue + ":" + drpMMEnd.SelectedValue).AddDays(i * 7);
                else
                    objDR["EndDate"] = "";

                dtEvRepeat.Rows.Add(objDR);
            }
        }
    }

答案 3 :(得分:-1)

伪代码:

var startTime = new DateTime(2012, 7, 7);
var stopTime = new DateTime(2012, 7, 31);

do {
    Console.WriteLine(startTime.ToShortDate());
    startTime.AddDays(7);
} while ( startTime < stopTime );