Добавление дней на дату, но, исключая выходные

Мы использовали https://github.com/cesanta/docker_auth , и он работает довольно хорошо, вы можете настроить множество методов аутентификации

Для получения дополнительной информации проверьте
[112 ] https://github.com/cesanta/docker_auth/blob/master/README.md

25
задан Blair Conrad 10 November 2008 в 21:49
поделиться

7 ответов

с использованием Fluent DateTime https://github.com/FluentDateTime/FluentDateTime

var dateTime = DateTime.Now.AddBusinessDays(4);
20
ответ дан 28 November 2019 в 21:30
поделиться
public DateTime AddBusinessDays(DateTime dt, int nDays)
{
    int weeks = nDays / 5;
    nDays %= 5;
    while(dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday)
        dt = dt.AddDays(1);

    while (nDays-- > 0)
    {
        dt = dt.AddDays(1);
        if (dt.DayOfWeek == DayOfWeek.Saturday)
            dt = dt.AddDays(2);
    }
    return dt.AddDays(weeks*7);
}
6
ответ дан 28 November 2019 в 21:30
поделиться

Не усложняя алгоритм, вы можете просто создать такой метод расширения:

public static DateTime AddWorkingDays(this DateTime date, int daysToAdd)
{
    while (daysToAdd > 0)
    {
        date = date.AddDays(1);

        if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
        {
            daysToAdd -= 1;
        }
    }

    return date;
}
5
ответ дан 28 November 2019 в 21:30
поделиться
int daysToAdd = weekDaysToAdd + ((weekDaysToAdd / 5) * 2) + (((origDate.DOW + (weekDaysToAdd % 5)) >= 5) ? 2 : 0);

Для остроумия; количество «настоящих» дней, которые нужно добавить, - это количество дней недели, которые вы указываете, плюс количество полных недель в этом общем количестве (следовательно, weekDaysToAdd / 5) раз два (два дня в выходные); плюс потенциальное смещение в два дня, если исходный день недели плюс количество будних дней для добавления «в пределах» недели (следовательно, weekDaysToAdd mod 5) больше или равно 5 (то есть является выходным днем).

Примечание: это работает при условии, что 0 = понедельник, 2 = вторник, ... 6 = воскресенье. Также; это не работает в отрицательные рабочие дни.

3
ответ дан 28 November 2019 в 21:30
поделиться

Это лучше, если кто-то ищет решение TSQL. Одна строка кода и работает с негативами.

CREATE FUNCTION[dbo].[AddBusinessDays](@Date date,@n INT)RETURNS DATE AS BEGIN 
DECLARE @d INT;SET @d=4-SIGN(@n)*(4-DATEPART(DW,@Date));
RETURN DATEADD(D,@n+((ABS(@n)+@d-2)/5)*2*SIGN(@n)-@d/7,@Date)END
0
ответ дан 28 November 2019 в 21:30
поделиться

Формула будет выглядеть так: Рабочий день (дата, число дней, (день недели (1)))

Попробуйте это. Это поможет.

-1
ответ дан 28 November 2019 в 21:30
поделиться

Учитывая число исходного дня в году D и исходного дня на неделе W и количества рабочих дней для добавления N следующее буднее число

W + N % 5.

На следующий день в году (без всеобъемлющей проверки),

D + ((N / 5) * 7) + N % 5).

, Это предполагает, что у Вас есть целочисленное деление.

-2
ответ дан 28 November 2019 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: