subtract-days added by sjamaan on Sat Feb 25 22:48:38 2012

;; Time is ignored, as is DST info
(define (subtract-days time days)
  (let* ((mday (vector-ref time 3))
         (month (vector-ref time 4))
         (year (vector-ref time 5))
         (wday (vector-ref time 6))
         (yday (vector-ref time 7)))
    (if (< days mday)
        (vector 0 0 0 (- mday days) month year
                (modulo (- wday days) 7) (- yday days) #t 0)
        (let* ((remaining-days (- days mday))
               (year (if (= month 0)
                         (sub1 year)
                         year))
               (yday (if (= month 0)
                         (if (leap-year? (+ year 1900)) 365 364)
                         (- yday mday)))
               (month (if (= month 0) 11 (sub1 month)))
               (wday (modulo (- wday mday) 7))
               (mday (days-in-month month (+ year 1900))))
          (subtract-days (vector 0 0 0 mday month year wday yday #t 0)
                         remaining-days)))))