Mercurial > octave
changeset 31291:bd5e3cc2284f
maint: Merge stable to default
author | Nicholas R. Jankowski <jankowski.nicholas@gmail.com> |
---|---|
date | Wed, 12 Oct 2022 10:41:05 -0400 |
parents | 90fc667a459d (current diff) b8afc6e7d9b4 (diff) |
children | 7713b2b5084b |
files | etc/NEWS.7.md |
diffstat | 2 files changed, 19 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/etc/NEWS.7.md Tue Oct 11 18:29:39 2022 -0700 +++ b/etc/NEWS.7.md Wed Oct 12 10:41:05 2022 -0400 @@ -21,6 +21,7 @@ - `pie3`: Fix "Too many input" args error. - Accept negative inputs to -2^63 for `dec2bin` and `dec2hex` (bug #63089). - Fix incorrect `lambda` outputs for `lsqnonneg` and `pqpnonneg` (bug #63178). +- `addtodate.m`: Fix wrong month returned when subtracting a month from some end-of-month dates (bug #60671). ### GUI
--- a/scripts/time/addtodate.m Tue Oct 11 18:29:39 2022 -0700 +++ b/scripts/time/addtodate.m Wed Oct 12 10:41:05 2022 -0400 @@ -64,6 +64,9 @@ ## adjust the years and months if the date rolls over a year dtmp(:,1) += floor ((dtmp(:,2)-1)/12); dtmp(:,2) = mod (dtmp(:,2)-1, 12) + 1; + ## avoid days beyond end of month + beyondEOM = dtmp(:,3) > eomday (dtmp(:,1), dtmp(:,2)); + dtmp(beyondEOM,3) = eomday (dtmp(beyondEOM,1), dtmp(beyondEOM,2)); endif dnew = datenum (dtmp); ## make the output the right shape @@ -120,6 +123,21 @@ %!assert (addtodate ([d;d+1], 1, "month"), [d+31;d+1+31]) %!assert (addtodate ([d d+1], 1, "month"), [d+31 d+1+31]) +## end of month days check +%!test <60671> +%! assert (addtodate (datenum ("2020-12-31"), -1, "month"), 738125) +%! assert (addtodate (datenum ("2020-12-30"), -1, "month"), 738125) +%! assert (addtodate (datenum ("2020-12-29"), -1, "month"), 738124) +%! assert (addtodate (datenum ("2021-03-31"), -1, "month"), 738215) +%! assert (addtodate (datenum ("2021-03-29"), -1, "month"), 738215) +%! assert (addtodate (datenum ("2020-03-30"), -1, "month"), 737850) +%! assert (addtodate (datenum ("2020-03-29"), -1, "month"), 737850) +%! assert (addtodate (datenum ("2020-03-28"), -1, "month"), 737849) +%! assert (addtodate (datenum ("2020-02-29"), -1, "month"), 737819) +%! assert (addtodate (datenum ("2020-02-28"), -1, "month"), 737818) +%! assert (addtodate (datenum ("2020-01-31"), +1, "month"), 737850) + + ## Test input validation %!error <Invalid call> addtodate () %!error <Invalid call> addtodate (1)