Если вы хотите использовать racket/date
, вы можете достичь своей цели с помощью find-seconds
, seconds->date
, current-seconds
и простой арифметики:
#lang racket
(require racket/date
racket/generator)
(define 1day (* 60 60 24))
(define (count-dates year month day)
(define target (find-seconds 0 0 0 day month year))
(in-generator
(let loop ([current (current-seconds)])
(when (>= current target)
(yield (seconds->date current))
(loop (- current 1day))))))
(date-display-format 'iso-8601)
(for ([dt (count-dates 2019 2 1)])
(displayln (date->string dt)))
Это выводит:
2019-02-11
2019-02-10
2019-02-09
2019-02-08
2019-02-07
2019-02-06
2019-02-05
2019-02-04
2019-02-03
2019-02-02
2019-02-01
То есть с сегодняшнего дня (11 февраля 2019 г.) по 1 февраля 2019 г.
Вы также можете использовать gregor или srfi-19 которые являются альтернативными библиотеками дат, которые имеют представление о продолжительности / разнице во времени.