diff --git a/src/Todoist.Net/Extensions/DateTimeExtensions.cs b/src/Todoist.Net/Extensions/DateTimeExtensions.cs index 67784f5..5f3377a 100644 --- a/src/Todoist.Net/Extensions/DateTimeExtensions.cs +++ b/src/Todoist.Net/Extensions/DateTimeExtensions.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace Todoist.Net.Extensions { @@ -8,5 +8,37 @@ public static string ToFilterParameter(this DateTime dateTime) { return dateTime.ToString("s"); } + + public static DateTime AddBusinessDays(this DateTime date, int days) + { + if (days < 0) + { + throw new ArgumentException("days cannot be negative", "days"); + } + + if (days == 0) return date; + + if (date.DayOfWeek == DayOfWeek.Friday) + { + date = date.AddDays(2); + days -= 1; + } + else if (date.DayOfWeek == DayOfWeek.Saturday) + { + date = date.AddDays(1); + days -= 1; + } + + date = date.AddDays(days / 5 * 7); + int extraDays = days % 5; + + if ((int)date.DayOfWeek + extraDays > 5) + { + extraDays += 2; + } + + return date.AddDays(extraDays); + + } } } diff --git a/src/Todoist.Net/Models/Duration.cs b/src/Todoist.Net/Models/Duration.cs index 62b85bd..abfaa62 100644 --- a/src/Todoist.Net/Models/Duration.cs +++ b/src/Todoist.Net/Models/Duration.cs @@ -1,6 +1,8 @@ using System; using System.Text.Json.Serialization; +using Todoist.Net.Extensions; + namespace Todoist.Net.Models { /// @@ -23,6 +25,16 @@ public Duration(int amount, DurationUnit unit) Unit = unit; } + /// + /// Initializes a new instance of the class. + /// + /// Business Days amount + public Duration(int businessDaysAmount) + { + Unit = DurationUnit.Day; + Amount = (int)(DateTime.Now.Date.AddBusinessDays(businessDaysAmount) - DateTime.Now.Date).TotalDays; + } + [JsonConstructor] internal Duration() {