簡體   English   中英

在Ajax日歷擴展程序控件中禁用周末和國定假日

[英]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);
    }
}

由於您可以執行以下操作來知道startend之間有多少天:

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

您可以通過執行totalDays - satsAndSundays.CounttotalDays - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM