Function: calendar-absolute-from-gregorian

calendar-absolute-from-gregorian is a byte-compiled function defined in calendar.el.gz.

Signature

(calendar-absolute-from-gregorian DATE)

Documentation

The number of days elapsed between the Gregorian date 12/31/1 BC and DATE.

The Gregorian date Sunday, December 31, 1 BC is imaginary. DATE is a list of the form (month day year). A negative year is interpreted as BC; -1 being 1 BC, and so on. Dates before 12/31/1 BC return negative results.

Source Code

;; Defined in /usr/src/emacs/lisp/calendar/calendar.el.gz
(defsubst calendar-absolute-from-gregorian (date)
  "The number of days elapsed between the Gregorian date 12/31/1 BC and DATE.
The Gregorian date Sunday, December 31, 1 BC is imaginary.
DATE is a list of the form (month day year).  A negative year is
interpreted as BC; -1 being 1 BC, and so on.  Dates before 12/31/1 BC
return negative results."
  (let ((year (calendar-extract-year date))
        offset-years)
    (cond ((zerop year)
           (user-error "There was no year zero"))
          ((> year 0)
           (setq offset-years (1- year))
           (+ (calendar-day-number date) ; days this year
              (* 365 offset-years)       ; + days in prior years
              (/ offset-years 4)         ; + Julian leap years
              (- (/ offset-years 100))   ; - century years
              (/ offset-years 400)))     ; + Gregorian leap years
          (t
           ;; Years between date and 1 BC, excluding 1 BC (1 for 2 BC, etc).
           (setq offset-years (abs (1+ year)))
           (- (calendar-day-number date)
              (* 365 offset-years)
              (/ offset-years 4)
              (- (/ offset-years 100))
              (/ offset-years 400)
              (calendar-day-number '(12 31 -1))))))) ; days in year 1 BC