您可以使用 Data.Time.Calendar
中的 (fromGregonorianValid,addDays)
import Data.Time.Calendar
import Data.Time
getDates :: String -> String -> [String]
getDates from to
| null jdateFrom || null jdateTo = error "error in dates"
| otherwise = map show [dateFrom,addDays 7 dateFrom..dateTo]
where
jdateFrom = getDate from
jdateTo = getDate to
(Just dateFrom) = getDate from
(Just dateTo) = getDate to
getDate dateStr = parseTimeM True defaultTimeLocale "%Y-%-m-%-d" dateStr :: Maybe Day
> getDates "2020-01-01" "2021-01-01"
["2020-01-01","2020-01-08","2020-01-15","2020-01-22","2020-01-29","2020-02-05","2020-02-12","2020-02-19","2020-02-26","2020-03-04","2020-03-11","2020-03-18","2020-03-25","2020-04-01","2020-04-08","2020-04-15","2020-04-22","2020-04-29","2020-05-06","2020-05-13","2020-05-20","2020-05-27","2020-06-03","2020-06-10","2020-06-17","2020-06-24","2020-07-01","2020-07-08","2020-07-15","2020-07-22","2020-07-29","2020-08-05","2020-08-12","2020-08-19","2020-08-26","2020-09-02","2020-09-09","2020-09-16","2020-09-23","2020-09-30","2020-10-07","2020-10-14","2020-10-21","2020-10-28","2020-11-04","2020-11-11","2020-11-18","2020-11-25","2020-12-02","2020-12-09","2020-12-16","2020-12-23","2020-12-30"]