diff options
| -rw-r--r-- | todo.go | 2 | ||||
| -rw-r--r-- | todolist/date_filter.go | 17 | ||||
| -rw-r--r-- | todolist/parser.go | 3 |
3 files changed, 21 insertions, 1 deletions
@@ -43,7 +43,7 @@ func usage() { blueBold.Println("\nListing todos") fmt.Println(" When listing todos, you can filter and group the output.\n") - fmt.Println(" todo l due (tod|today|tom|tomorrow|overdue|this week|next week|mon|tue|wed|thu|fri|sat|sun|none)") + fmt.Println(" todo l due (tod|today|tom|tomorrow|overdue|this week|next week|last week|mon|tue|wed|thu|fri|sat|sun|none)") fmt.Println(" todo l overdue") cyan.Println(" Filtering by date:\n") diff --git a/todolist/date_filter.go b/todolist/date_filter.go index b56f117..fb06682 100644 --- a/todolist/date_filter.go +++ b/todolist/date_filter.go @@ -45,6 +45,8 @@ func (f *DateFilter) FilterDate(input string) []*Todo { return f.filterThisWeek(bod(time.Now())) case match == "due next week": return f.filterNextWeek(bod(time.Now())) + case match == "due last week": + return f.filterLastWeek(bod(time.Now())) case match == "overdue": return f.filterOverdue(bod(time.Now())) } @@ -130,6 +132,21 @@ func (f *DateFilter) filterNextWeek(pivot time.Time) []*Todo { return ret } +func (f *DateFilter) filterLastWeek(pivot time.Time) []*Todo { + var ret []*Todo + + begin := f.FindSunday(pivot).AddDate(0, 0, -7) + end := begin.AddDate(0, 0, 7) + + for _, todo := range f.Todos { + dueTime, _ := time.ParseInLocation("2006-01-02", todo.Due, f.Location) + if begin.Before(dueTime) && end.After(dueTime) { + ret = append(ret, todo) + } + } + return ret +} + func (f *DateFilter) filterOverdue(pivot time.Time) []*Todo { var ret []*Todo diff --git a/todolist/parser.go b/todolist/parser.go index ca5083a..1f070c3 100644 --- a/todolist/parser.go +++ b/todolist/parser.go @@ -94,6 +94,9 @@ func (p *Parser) Due(input string, day time.Time) string { return p.saturday(day) case "sunday", "sun": return p.sunday(day) + case "last week": + n := bod(time.Now()) + return getNearestMonday(n).AddDate(0, 0, -7).Format("2006-01-02") case "next week": n := bod(time.Now()) return getNearestMonday(n).AddDate(0, 0, 7).Format("2006-01-02") |
