Function: icalendar-recur-find-daily-interval

icalendar-recur-find-daily-interval is a byte-compiled function defined in icalendar-recur.el.gz.

Signature

(icalendar-recur-find-daily-interval TARGET DTSTART INTERVALSIZE &optional VTIMEZONE)

Documentation

Find a DAILY recurrence interval.

See icalendar-recur-find-interval for arguments' meanings.

Source Code

;; Defined in /usr/src/emacs/lisp/calendar/icalendar-recur.el.gz
(defun icr:find-daily-interval (target dtstart intervalsize &optional vtimezone)
  "Find a DAILY recurrence interval.
See `icalendar-recur-find-interval' for arguments' meanings."
  (let* ((start-absdate (calendar-absolute-from-gregorian
                         (ical:date/time-to-date dtstart)))
         (target-absdate (calendar-absolute-from-gregorian
                          (ical:date/time-to-date target)))
         ;; low-absdate is the closest absolute date below target that
         ;; is an integer multiple of intervalsize days from dtstart
         (low-absdate (- target-absdate
                         (mod (- target-absdate start-absdate) intervalsize)))
         (high-absdate (1+ low-absdate))
         (next-low-absdate (+ low-absdate intervalsize)))

    (let* ((low-dt (ical:date-to-date-time
                     (calendar-gregorian-from-absolute low-absdate)))
           (high-dt (ical:date-to-date-time
                      (calendar-gregorian-from-absolute high-absdate)))
           (next-low-dt (unless (= high-absdate next-low-absdate)
                          (ical:date-to-date-time
                           (calendar-gregorian-from-absolute next-low-absdate)))))

      (when vtimezone
        (icr:tz-set-zone low-dt vtimezone)
        (icr:tz-set-zone high-dt vtimezone)
        (when next-low-dt
          (icr:tz-set-zone next-low-dt vtimezone)))

      ;; Return the bounds:
      (icr:make-interval low-dt high-dt next-low-dt))))