Мы использовали https://github.com/cesanta/docker_auth , и он работает довольно хорошо, вы можете настроить множество методов аутентификации
Для получения дополнительной информации проверьте
[112 ] https://github.com/cesanta/docker_auth/blob/master/README.md
с использованием Fluent DateTime https://github.com/FluentDateTime/FluentDateTime
var dateTime = DateTime.Now.AddBusinessDays(4);
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);
}
Не усложняя алгоритм, вы можете просто создать такой метод расширения:
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;
}
int daysToAdd = weekDaysToAdd + ((weekDaysToAdd / 5) * 2) + (((origDate.DOW + (weekDaysToAdd % 5)) >= 5) ? 2 : 0);
Для остроумия; количество «настоящих» дней, которые нужно добавить, - это количество дней недели, которые вы указываете, плюс количество полных недель в этом общем количестве (следовательно, weekDaysToAdd / 5) раз два (два дня в выходные); плюс потенциальное смещение в два дня, если исходный день недели плюс количество будних дней для добавления «в пределах» недели (следовательно, weekDaysToAdd mod 5) больше или равно 5 (то есть является выходным днем).
Примечание: это работает при условии, что 0 = понедельник, 2 = вторник, ... 6 = воскресенье. Также; это не работает в отрицательные рабочие дни.
Это лучше, если кто-то ищет решение 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
Формула будет выглядеть так: Рабочий день (дата, число дней, (день недели (1)))
Попробуйте это. Это поможет.
Учитывая число исходного дня в году D и исходного дня на неделе W и количества рабочих дней для добавления N следующее буднее число
W + N % 5.
На следующий день в году (без всеобъемлющей проверки),
D + ((N / 5) * 7) + N % 5).
, Это предполагает, что у Вас есть целочисленное деление.