Subject: Re: bug#63784: date --date "1 month ago" +%Y-%m does not work as expected on day 31

From: Pádraig Brady <[email-masked]>
Date: Mon, 29 May 2023 15:27:13 +0100

On 29/05/2023 12:55, Jelle de Jong wrote:
> Hello everybody,
> 
> I been hitting an issue for a while now that  date commands return the
> wrong month on day 31 of a month and my automations stops working on
> correctly on these days.
> 
> root@sydney:~# date
> Wed Aug 31 22:09:04 CEST 2022
> root@sydney:~# date --date "1 month ago" +%Y-%m
> 2022-07
> root@sydney:~# date --date "2 month ago" +%Y-%m
> 2022-07
> root@sydney:~# date --date "3 month ago" +%Y-%m
> 2022-05
> root@sydney:~# date --date "4 month ago" +%Y-%m
> 2022-05
> 
> root@sydney:~# date
> Sat Dec 31 19:20:13 CET 2022
> root@sydney:~# date --date '1 month ago' +%Y-%m
> 2022-12
> 
> $ date --version
> date (GNU coreutils) 8.30
> Copyright (C) 2018 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> 
> I would love to have this fixed if possible.
> 
> If I am using the wrong command I would love to be educated as well.
> Should I use date --date "$(date +%Y-%m-01) -1 month" +%Y-%m instead...

Yes that is confusing.
The current workaround is to operate relative to the middle of the month as described at:
https://www.gnu.org/software/coreutils/faq/coreutils-faq.html#The-date-command-is-not-working-right_002e