Function: icalendar-recur-find-weekly-interval
icalendar-recur-find-weekly-interval is a byte-compiled function
defined in icalendar-recur.el.gz.
Signature
(icalendar-recur-find-weekly-interval TARGET DTSTART INTERVALSIZE &optional WEEKSTART VTIMEZONE)
Documentation
Find a WEEKLY 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-weekly-interval (target dtstart intervalsize
&optional weekstart vtimezone)
"Find a WEEKLY recurrence interval.
See `icalendar-recur-find-interval' for arguments' meanings."
(let* ((target-date (ical:date/time-to-date target))
(start-date (ical:date/time-to-date dtstart))
;; the absolute dates of the week start before target and
;; dtstart; these are always a whole number of weeks apart:
(target-week-abs (calendar-nth-named-absday
-1
(or weekstart 1)
(calendar-extract-month target-date)
(calendar-extract-year target-date)
(calendar-extract-day target-date)))
(start-abs (calendar-nth-named-absday
-1
(or weekstart 1)
(calendar-extract-month start-date)
(calendar-extract-year start-date)
(calendar-extract-day start-date)))
(intsize-days (* 7 intervalsize))
;; the absolute date of the week start before target which is
;; an integer multiple of intervalsize weeks from dtstart:
(low-abs (- target-week-abs
(mod (- target-week-abs start-abs) intsize-days)))
;; then use this to find the interval bounds:
(low (ical:date-to-date-time
(calendar-gregorian-from-absolute low-abs)))
(high (ical:date-to-date-time
(calendar-gregorian-from-absolute (+ 7 low-abs))))
(next-low
(when (< 1 intervalsize)
(ical:date-to-date-time
(calendar-gregorian-from-absolute (+ intsize-days low-abs))))))
(when vtimezone
(icr:tz-set-zone low vtimezone)
(icr:tz-set-zone high vtimezone)
(when next-low
(icr:tz-set-zone next-low vtimezone)))
;; Return the bounds:
(icr:make-interval low high next-low)))