我一直在尝试为我的应用程序使用 ajax CalenderExtender。
我的应用程序中有许多小操作,例如将持续时间添加到任务的开始日期以查找完成日期,如果结束日期发生更改(取决于开始日期)则更改任务的持续时间等。
但是,当我执行所有这些操作时,我想跳过所有假期和星期六、星期日的计算,例如。一个任务从 01/23/2014 开始,持续时间为 5 天,应该在 01/29/2014(为 sat n sun 持续时间增加 2 天)而不是 01/27/2014 结束。其他操作也应执行相同的操作。
有办法吗?
最佳答案
对于周日和周六,这很容易。只需检查 DateTime.DayOfWeek
您日期的属性。
如果您有一个将在 start
日期开始并将在 end
日期结束的操作,您可以像这样查看星期六或星期日的日期:
List<DateTime> satsAndSundays;
for (DateTime temp = start; temp <= end; temp.AddDays(1))
{
if (temp.DayOfWeek == DayOfWeek.Sunday ||
temp.DayOfWeek == DayOfWeek.Saturday)
{
satsAndSundays.add(temp);
}
}
因为您可以通过执行以下操作知道开始
和结束
之间有多少天:
TimeSpan span = end - start;
int totalDays = (int)span.TotalDays;
// TotalDays is actually a double, I'm just discarding the non integer part.
您可以通过执行 totalDays - satsAndSundays.Count
找出您在那里有多少工作日。
编辑:我刚刚再次阅读了这个问题。如果您希望任务在给定日期开始,并花费 x
个工作日,您可以这样做:
DateTime end = start;
for (int i = x; i >= 0;) // the third parameter of the for is empty on purpose
{
end = end.AddDays(1);
if (end.DayOfWeek != DayOfWeek.Saturday &&
end.DayOfWeek != DayOfWeek.Sunday)
{
i--;
}
}
循环之后,end
将在 start
之后的 x
个工作日(前提是中间没有假期)。
不过,对于节假日,框架中没有相应的算法。您需要从某些来源(文件、数据库、Web 服务等)获取它们。或者您可以编写自己的程序来计算它们 - 大多数不在固定日期的假期在发生时确实遵循公式。但是请注意,假期可能因文化和地区而异。例如,如果您的应用程序要在全国范围内使用,那么实现全市假期可能需要付出很大的努力。根据您的需要,让用户输入哪些日子是假期,或者创建您自己的数据库,您的应用程序可以访问和使用它甚至可能更好。
关于c# - 在 ajax 日历扩展器控件中禁用周末和国定假日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21307406/