diff --git a/helpers/datetime.nim b/helpers/datetime.nim index 554016e..57af835 100644 --- a/helpers/datetime.nim +++ b/helpers/datetime.nim @@ -69,38 +69,30 @@ proc nextMonthlyOnWeekdayOfWeek*(weekdayString: string, ocurrence: string): Date let nextMonthsDate = now() + 1.months let weekNumStrings = @["1", "2", "3"] if ocurrence in weekNumStrings: - nextSendDate = nthWeekdayInMonth(year(nextMonthsDate), month(nextMonthsDate), weekdayString, parseInt(ocurrence)) - #when ocurrence == "last". + #nextSendDate = nthWeekdayInMonth(year(nextMonthsDate), month(now()), weekdayString, parseInt(ocurrence)) + nextSendDate = nthWeekdayInMonth(year(now()), month(now()), weekdayString, parseInt(ocurrence)) + if format(nextSendDate, "yyyy-MM-dd") <= format(now(), "yyyy-MM-dd"): + nextSendDate = nthWeekdayInMonth(year(nextMonthsDate), month(nextMonthsDate), weekdayString, parseInt(ocurrence)) else: - nextSendDate = lastWeekdayInMonth(year(nextMonthsDate), month(nextMonthsDate), weekdayString) - #only use next month if that day has already occured this month, otherwise adjust it for this month instead. - if monthDay(nextSendDate - 1.months) > monthDay(now()): - if ocurrence in weekNumStrings: - nextSendDate = nthWeekdayInMonth(year(nextMonthsDate), month(now()), weekdayString, parseInt(ocurrence)) - else: - nextSendDate = lastWeekdayInMonth(year(nextMonthsDate), month(now()), weekdayString) + #nextSendDate = lastWeekdayInMonth(year(nextMonthsDate), month(now()), weekdayString) + nextSendDate = lastWeekdayInMonth(year(now()), month(now()), weekdayString) + if format(nextSendDate, "yyyy-MM-dd") <= format(now(), "yyyy-MM-dd"): + nextSendDate = lastWeekdayInMonth(year(nextMonthsDate), month(nextMonthsDate), weekdayString) return nextSendDate proc nextYearlyOnWeekdayOfWeekOfMonth*(weekdayString, ocurrence, monthString: string): DateTime = - var nextSendDate, startingDate: DateTime - let nextYearsDate = now() + 1.years - #let startingDate = dateTime(year(nextYearsDate), monthFromString(monthString), 01, 0, 0, 0, 0) - startingDate = dateTime(year(nextYearsDate), monthFromString(monthString), 01) + var nextSendDate, startingDate, nextYearsDate: DateTime + nextYearsDate = now() + 1.years + nextYearsDate = dateTime(year(nextYearsDate), monthFromString(monthString), 01) let weekNumStrings = @["1", "2", "3"] if ocurrence in weekNumStrings: - nextSendDate = nthWeekdayInMonth(year(startingDate), month(startingDate), weekdayString, parseInt(ocurrence)) - #when ocurrence == "last". + nextSendDate = nthWeekdayInMonth(year(now()), month(now()), weekdayString, parseInt(ocurrence)) + if format(nextSendDate, "yyyy-MM-dd") <= format(now(), "yyyy-MM-dd"): + nextSendDate = nthWeekdayInMonth(year(nextYearsDate), month(nextYearsDate), weekdayString, parseInt(ocurrence)) else: - nextSendDate = lastWeekdayInMonth(year(startingDate), month(startingDate), weekdayString) - #only use next year if that month and day has already occured this year, otherwise adjust it for this year instead. - if nextSendDate - 1.years > now(): - startingDate = dateTime(year(now()), monthFromString(monthString), 01) - let weekNumStrings = @["1", "2", "3"] - if ocurrence in weekNumStrings: - nextSendDate = nthWeekdayInMonth(year(startingDate), month(startingDate), weekdayString, parseInt(ocurrence)) - #when ocurrence == "last". - else: - nextSendDate = lastWeekdayInMonth(year(startingDate), month(startingDate), weekdayString) + nextSendDate = lastWeekdayInMonth(year(now()), month(now()), weekdayString) + if format(nextSendDate, "yyyy-MM-dd") <= format(now(), "yyyy-MM-dd"): + nextSendDate = lastWeekdayInMonth(year(nextYearsDate), month(nextYearsDate), weekdayString) return nextSendDate #[ Returns the next occurrence of the specified month and day, which could be: