[英]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.