2014-01-23 80 views
1

節假日我一直在嘗試使用AJAX CalenderExtender我的應用程序。禁用週末,在阿賈克斯日曆擴展控制

我在我的應用程序很多小的操作,比如添加時間啓動任務的日期找到的完成日期,如果(這取決於它的開始日期)的結束日期更改更改任務的持續時間等。

不過,雖然我做的所有這些操作我想跳過所有的節假日和週六,週日從計算的如。開始於2014年1月23日有5天的持續時間的任務要完成在2014年1月29日(加入2天SAT N的持續時間太陽),而不是2014年1月27日。其他操作也應執行相同的操作。

有沒有辦法做到這一點?

回答

1

試試這個..

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; 
    } 
3

爲週六,週日,這很容易。只需檢查您的日期的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); 
    } 
} 

而且因爲多少天有是startend之間做一樣的東西:

TimeSpan span = end - start; 
int totalDays = (int)span.TotalDays; 
// TotalDays is actually a double, I'm just discarding the non integer part. 

您可能FID出你有多少個工作日內通過做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--; 
    } 
} 

Afther循環,endx個工作日之後start(只要是沒有假期之間)。

假期,不過,對於在該框架沒有alghoritm。您需要從某個源(文件,數據庫,Web服務等)獲取它們。或者你可以編寫自己的程序來解決它們 - 大多數不是固定日期的假期在發生時都遵循公式。不過,請注意,假期可能因文化和地區而異。例如,如果您的申請要在全國範圍內使用,那麼實施全市假期可能是相當費力的。根據您的需求,甚至可以讓用戶輸入哪些日子是假期,或者讓您的應用可以訪問和使用您自己的數據庫。