每两周一次的 C# 逻辑
本文关键字:一次 逻辑 两周 | 更新日期: 2023-09-27 18:33:01
任何人请帮助我每两周一次的 C# MVC 5 日历逻辑。我已经实现了每周约会。
这是我的每周代码。它正在工作。
var day = (from o in db.Suburbs.AsEnumerable()
..etc
select new
{
DT.DeliveryDay,
}).ToList();
foreach (var temp in day)
{
if (Type == "weekly")
{
int weeklyLogic = ((int)Enum.Parse(typeof(DayOfWeek), temp.DeliveryDay) - (int)today.DayOfWeek + 7) % 7;
DateTime nextweeklyLogic = today.AddDays(weeklyLogic);
Firstweek = nextweeklyLogic;
int weekly2 = (((int)Enum.Parse(typeof(DayOfWeek), temp.DeliveryDay) - (int)today.DayOfWeek + 7) % 7) + 7;
DateTime Secondweek = today.AddDays(weekly2);
int weekly3 = (((int)Enum.Parse(typeof(DayOfWeek), temp.DeliveryDay) - (int)today.DayOfWeek + 7) % 7) + 14;
DateTime Thirdweek = today.AddDays(weekly3);
etc..
}
else if (Type == "fortnightly")
{
}
}
例如,对于Type == "fortnightly"
,例如temp.DeliveryDay == "Friday"
,那么基于今天(2 月 2 日),我希望输出为:
February 5th (First Friday after today, since temp.DeliveryDay is friday)
February 19th (14 days or fortnight from the first output)
March 4th
etc.
第一件事 - 你重复你所有的行为来获得每周的约会。我建议分解您的操作。我看到两个主要部分。
- 获取今天之后一周中任意日期的日期。
- 从上面确定的日期开始获取定期重复日期。
这种方法可以照顾第一部分,
DateTime FirstDayOfWeekAfter(DateTime day, DayOfWeek dayOfWeek)
{
// We don't want to return today.
day = day.AddDays(1);
// If the current tested day is the desired day of week, return.
if (day.DayOfWeek == dayOfWeek)
{
return day;
}
// else call again with the next day.
else
{
return FirstDayOfWeekAfter(day, dayOfWeek);
}
}
这对方法将负责第二部分。我这里有第一种方法,所以当你实际使用它时,不需要强制转换为(每周一天)。
IEnumerable<DateTime> GetPeriodicDeliveryDates(DateTime today, object dayOfDelivery, int period)
{
return GetPeriodicDeliveryDates(today, (DayOfWeek)dayOfDelivery, period);
}
IEnumerable<DateTime> GetPeriodicDeliveryDates(DateTime today, DayOfWeek dayOfDelivery, int period)
{
// Get the date of the first delivery.
var firstDelivery = FirstDayOfWeekAfter(today, dayOfDelivery);
while (true)
{
// Infinitely yield dates separated by the supplied period length.
yield return firstDelivery;
firstDelivery = firstDelivery.AddDays(period);
}
}
这些方法的使用很简单。每周和每两周枚举的唯一区别是这段时间传递到 GetPeriodicDeliveryDates()
.您确实希望确保不要尝试完全枚举GetPeriodicDeliveryDates()
- 它是无限序列的。
var today = DateTime.Today;
var temp = new { DeliveryDay = "Friday" };
var weekly = GetPeriodicDeliveryDates(today, Enum.Parse(typeof(DayOfWeek), temp.DeliveryDay), 7);
var fortnightly = GetPeriodicDeliveryDates(today, Enum.Parse(typeof(DayOfWeek), temp.DeliveryDay), 14);
weekly.Take(5).ToList().ForEach(x => Console.WriteLine(x));
Console.WriteLine();
fortnightly.Take(5).ToList().ForEach(x => Console.WriteLine(x));