Fix handling of delta values with negative month field
* lisp/calendar/time-date.el (decoded-time-add): If the new variable is less then zero, the year needs to be decremented by quotient of new and 12 increased by one. * test/lisp/calendar/time-date-tests.el (test-decoded-add): Add applicable test cases. (Bug#68969)
This commit is contained in:
parent
c0ca272bd7
commit
bc33b70b28
2 changed files with 13 additions and 1 deletions
|
@ -547,7 +547,7 @@ changes in daylight saving time are not taken into account."
|
|||
(when (decoded-time-month delta)
|
||||
(let ((new (+ (1- (decoded-time-month time)) (decoded-time-month delta))))
|
||||
(setf (decoded-time-month time) (1+ (mod new 12)))
|
||||
(incf (decoded-time-year time) (/ new 12))))
|
||||
(incf (decoded-time-year time) (- (/ new 12) (if (< new 0) 1 0)))))
|
||||
|
||||
;; Adjust for month length (as described in the doc string).
|
||||
(setf (decoded-time-day time)
|
||||
|
|
|
@ -161,6 +161,18 @@
|
|||
(should (equal (decoded-time-add time (mdec :month 10))
|
||||
'(12 15 16 8 5 2020 1 t 7200)))
|
||||
|
||||
(should (equal (decoded-time-add time (mdec :month -1))
|
||||
'(12 15 16 8 6 2019 1 t 7200)))
|
||||
|
||||
(should (equal (decoded-time-add time (mdec :month -10))
|
||||
'(12 15 16 8 9 2018 1 t 7200)))
|
||||
|
||||
(should (equal (decoded-time-add time (mdec :month -14))
|
||||
'(12 15 16 8 5 2018 1 t 7200)))
|
||||
|
||||
(should (equal (decoded-time-add time (mdec :month -24))
|
||||
'(12 15 16 8 7 2017 1 t 7200)))
|
||||
|
||||
(should (equal (decoded-time-add time (mdec :day 1))
|
||||
'(12 15 16 9 7 2019 1 t 7200)))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue