<div dir="ltr"><div>Working with a custom handin-server, I have a date value which represents a deadline, but I also want to allow late submission up to 3 days later than that (well, an arbitrary number of days). Hence, I need to check whether the current date is at most 3 days later than the first one.</div>
<div><br>In the configuration file I read a custom entry for the deadline, indicating year, month, day, hours, minutes and seconds. Then I guess I could do:</div><div><br></div><div>(define d      (seconds->date (find-seconds seconds minutes hours day month year)))</div>
<div>(define d+1 (seconds->date (find-seconds seconds minutes hours (+ day 1) month year))</div><div>(define d+2 (seconds->date (find-seconds seconds minutes hours (+ day 2) month year))</div><div>(define d+3 (seconds->date (find-seconds seconds minutes hours (+ day 3) month year))</div>
<div><br></div><div>And then do a comparison, like</div><div><br></div><div>(let ([now (current-seconds)])</div><div>   (or (> now (date->seconds d)) (> now (date->seconds d+1) ...))</div><div><br></div><div>But this looks too low level to me, and surprisingly the utilities provided by racket/date are somewhat sparse.</div>
<div><br></div><div>Does anyone know about a higher-level library for manipulating dates, and performing arithmetic comparisons and operations? </div><div><br></div><div>Ideally I'd imagine something like:</div><div><br>
</div><div>(let ([now (current-date)])</div><div>   (cond</div><div>      [(date< now d) ...] ;; ok</div><div>      [(date< now (date-add-day d 1)) ... ] ;; warning 1 day   late</div><div>      [(date< now (date-add-day d 2)) ... ] ;; warning 2 days late</div>
<div>      ....</div><div>      [else ...] ;; submission rejected because it is past deadline + extra days</div><div>)</div><div><br></div><div>Thanks!</div><div>-- <br>Ismael<br>
</div></div>