diff --git a/internal/task/recur.go b/internal/task/recur.go index c40d069..6bbbe5c 100644 --- a/internal/task/recur.go +++ b/internal/task/recur.go @@ -260,7 +260,18 @@ func (enm EveryNMonths) RecursOn(date Date) bool { return false } - return enm.Start.Day() == date.Day() + tDate := enm.Start + for { + if tDate.Equal(date) { + return true + } + if tDate.After(date) { + return false + } + tYear, tMonth, tDay := tDate.Time().Date() + tDate = NewDate(tYear, int(tMonth)+enm.N, tDay) + } + } func (enm EveryNMonths) String() string { diff --git a/internal/task/recur_test.go b/internal/task/recur_test.go index 8beae11..18bf2b2 100644 --- a/internal/task/recur_test.go +++ b/internal/task/recur_test.go @@ -338,6 +338,19 @@ func TestEveryNMonths(t *testing.T) { { name: "one month", date: task.NewDate(2021, 3, 3), + }, + { + name: "3 months", + date: task.NewDate(2021, 5, 3), + exp: true, + }, + { + name: "4 months", + date: task.NewDate(2021, 6, 3), + }, + { + name: "6 months", + date: task.NewDate(2021, 8, 3), exp: true, }, } {