bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#8190: Minor improvement for diary-yahrzeit


From: Edward Reingold
Subject: bug#8190: Minor improvement for diary-yahrzeit
Date: Sun, 6 Mar 2011 13:50:48 -0600

The code below includes the one day correction needed if the death is
after local sunset.  This change makes the code parallel to the code
for diary-hebrew-birthday that I sent last week.

(defun diary-yahrzeit
  (death-month death-day death-year &optional after-sunset)
  "Yahrzeit diary entry--entry applies if date is yahrzeit or the day before.
Parameters are DEATH-MONTH, DEATH-DAY, DEATH-YEAR; the diary entry is assumed
to be the name of the person.  Date of death is on the *civil* calendar;
although the date of death is specified by the civil calendar, the proper
Hebrew calendar yahrzeit is determined.  NOTE: If the death occurred after
local sunset on the given civil date, the following civil date corresponds to
the Hebrew date of death--the optional parameter AFTER-SUNSET does this
correction when t.  If `european-calendar-style' is t, the order of the
parameters is changed to DEATH-DAY, DEATH-MONTH, DEATH-YEAR."
  (let* ((h-date (calendar-hebrew-from-absolute
                  (+ (calendar-absolute-from-gregorian
                      (if european-calendar-style
                          (list death-day death-month death-year)
                        (list death-month death-day death-year)))
                     (if after-sunset 1 0))))
         (h-month (extract-calendar-month h-date))
         (h-day (extract-calendar-day h-date))
         (h-year (extract-calendar-year h-date))
         (d (calendar-absolute-from-gregorian date))
         (yr (extract-calendar-year (calendar-hebrew-from-absolute d)))
         (diff (- yr h-year))
         (y (hebrew-calendar-yahrzeit h-date yr)))
    (if (and (> diff 0) (or (= y d) (= y (1+ d))))
        (format "Yahrzeit of %s%s: %d%s anniversary"
                entry
                (if (= y d) "" " (evening)")
                diff
                (cond ((= (% diff 10) 1) "st")
                      ((= (% diff 10) 2) "nd")
                      ((= (% diff 10) 3) "rd")
                      (t "th"))))))





reply via email to

[Prev in Thread] Current Thread [Next in Thread]