我有一个ASP.Net日历功能,允许用户添加事件和 配置它们是否以不同的频率重复(即每天, 每周,每月,周六/周日等)。我正在寻找的是一些C#代码 将根据开始日期计算“每隔一周”的日期 结束日期。
示例:如果用户输入了2012年7月7日的活动并希望如此 每隔一周重复一次,直到2012年7月31日,代码将返回 以下日期:
2012年7月7日 2012年7月14日 2012年7月21日 2012年7月28日
还有一个功能就是选择星期几(即星期一,星期二,星期三......)。
非常感谢任何帮助。
答案 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;
}
如果您的开始日期和结束日期也包含时间组件,则需要小心。例如,如果:
然后上面的函数将不包括列表中的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 );