fix #10 and related unreported issues.

This commit is contained in:
itwrx 2025-05-18 08:18:22 -05:00
parent 04b3317f42
commit d5e2daf1e6
1 changed files with 17 additions and 25 deletions

View File

@ -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: