[ create a new paste ] login | about

Link: http://codepad.org/IpMrB5Vs    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Jul 5:
; weekdays between two dates

(define (julian year month day)
  (let* ((a (quotient (- 14 month) 12))
         (y (+ year 4800 (- a)))
         (m (+ month (* 12 a) -3)))
    (+ day
       (quotient (+ (* 153 m) 2) 5)
       (* 365 y)
       (quotient y 4)
       (- (quotient y 100))
       (quotient y 400)
       (- 32045))))

(define (weekdays y-from m-from d-from y-to m-to d-to)
  (let* ((from (julian y-from m-from d-from))
         (to (julian y-to m-to d-to))
         (diff (- to from)))
    (+ (* 5 (quotient diff 7))
       (let loop ((k (modulo diff 7)) (w 0))
         (if (zero? k) w
           (loop (- k 1)
                 (+ w (if (< (modulo (- to k) 7) 5) 1 0))))))))

(display (weekdays 2013 7 5 2013 7 6)) (newline)
(display (weekdays 2013 7 5 2013 7 7)) (newline)
(display (weekdays 2013 7 5 2013 7 8)) (newline)
(display (weekdays 2013 7 5 2013 7 9)) (newline)
(display (weekdays 2013 7 5 2013 7 10)) (newline)
(display (weekdays 2013 7 5 2013 7 11)) (newline)
(display (weekdays 2013 7 5 2013 7 18)) (newline)
(display (weekdays 2013 7 5 2013 7 25)) (newline)


Output:
1
2
3
4
5
6
7
8
1
1
1
2
3
4
9
14


Create a new paste based on this one


Comments: