[英]Disabling weekend and national Holidays in ajax calendar extender control
我一直在尝试为我的应用程序使用ajax CalenderExtender。
我的应用程序中有很多小操作,例如将持续时间添加到任务的开始日期以查找完成日期,如果任务的结束日期已更改(取决于其开始日期),则更改任务的持续时间等。
但是,当我执行所有这些操作时,我想从例如的计算中跳过所有的假期和周六,周日。 从2014年1月23日开始,持续时间为5天的任务应在2014年1月29日完成(持续时间为连续2天增加2天),而不是2014年1月27日。 其他操作也应执行相同的操作。
有没有办法做到这一点?
对于周日和周六,这很容易。 只需检查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);
}
}
由于您可以执行以下操作来知道start
和end
之间有多少天:
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
来totalDays - satsAndSundays.Count
您在那里有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服务等)中获取它们。 或者,您可以编写自己的程序来解决这些问题-大多数不在固定日期的假期的发生时间都遵循公式。 但是请务必考虑到,假期可能因文化和地区而异。 例如,如果要在一个国家/地区使用您的应用程序,则实施全市假期可能是相当大的努力。 根据您的需求,最好让用户输入假期的日期,或者创建自己的数据库以供您的应用访问和使用。
试试这个
private string GetDatesOfSundays(DateTime DatMonth)
{
string sReturn = "";
int iDayOffset = DatMonth.Day - 1;
DatMonth = DatMonth.AddDays(System.Convert.ToDouble(-DatMonth.Day + 1));
DateTime DatMonth2 = DatMonth.AddMonths(1).AddDays(System.Convert.ToDouble(-1));
while (DatMonth < DatMonth2)
{
if (DatMonth.DayOfWeek == System.DayOfWeek.Sunday)
{
if (sReturn.Length > 0) sReturn += ",";
sReturn += DatMonth.ToShortDateString();
}
DatMonth = DatMonth.AddDays(1.0);
}
return sReturn;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.