c# - 在 ajax 日历扩展器控件中禁用周末和国定假日

标签 c# asp.net ajax calendar

我一直在尝试为我的应用程序使用 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/

相关文章:

jquery - 在 AJAX 简写方法中设置传统属性

c# - 我可以使用 BouncycaSTLe for C# 使用密码创建可重现的 PGP key 对吗?

c# - 在进行备份时使用目录的 Last Modified 时间戳是否可靠?

c# - 是否有用于 Visual Studio 的断点插件?

c# - RowDataBound-Event 中的 FindControl 以错误结束

asp.net - foreach block 缺少结束的 "}"字符。确保你有一个匹配的 "}"

javascript - JS & Node : Read table from DB with AJAX and display in table

C# - 使用 OpenXML 如何读取 Excel 文件上的空格

.net - 当我的大型 ASP.NET 站点更新时,IIS 必须重新编译其中的很多内容。有没有办法显着减少我的编译时间?

php - jquery/js 和 php 通信问题