如何获得所选日期的一天为整个月
本文关键字:一天 何获得 日期 | 更新日期: 2023-09-27 18:01:54
我想选择一天,比如星期一。现在我想得到所有星期一的日期落在那个月或两个选定日期之间(甚至更好)。如:
选择的日期:Monday
开始日期:3月1日
结束日期:4月30日
这必须得到这两个日期之间的所有8个星期一的日期。我准备使用下拉列表或日历或任何必要的东西来做到这一点。我正在使用c#, Visual Studio 2010。
试试这个
DateTime d1 = DateTime.Parse("03/01/2013");
DateTime d2 = DateTime.Parse("04/01/2013");
int days = (d2 - d1).TotalDays;
for (i = 0; i <= days; i++) {
DateTime d = d1.AddDays(i);
if ((d.DayOfWeek == DayOfWeek.Monday)) {
Console.WriteLine(d); //dateList.Add(d); <------ this could be a List<DateTime> or List<string>
}
}
Output - M/dd/yyyy format
-------
3/04/2013
3/11/2013
3/18/2013
3/25/2013
4/01/2013
这个算法真的很简单:
public static List<DateTime> GetDayOccurrences(DayOfWeek day, DateTime from, DateTime to)
{
var results = new List<DateTime>();
while (from <= to)
{
if (from.DayOfWeek == day)
{
results.Add(from);
from = from.AddDays(7);
}
else
{
from = from.AddDays(1);
}
}
return results;
}
如果当前日期是一周中的某一天,我将向前移动7天。
和该方法的用法:
var from = new DateTime(2013, 3, 1);
var to = new DateTime(2013, 4, 30);
List<DateTime> mondays = GetDayOccurrences(DayOfWeek.Monday, from, to);
Btw: 2013年3月1日至2013年4月30日有9个星期一:
2013-03-04
2013-03-11
2013-03-18
2013-03-25
2013-04-01
2013-04-08
2013-04-15
2013-04-22
2013-04-29
更新
也可以这样做,删除循环中的if
语句:
public static List<DateTime> GetDayOccurrences(DayOfWeek day, DateTime from, DateTime to)
{
var results = new List<DateTime>();
while(from <= to && from.DayOfWeek != day)
from = from.AddDays(1);
while (from <= to)
{
results.Add(from);
from = from.AddDays(7);
}
return results;
}