Ihor Radchenko writes: >> I have a TODO-entry which looks like this: >> >> SCHEDULED: <2024-02-29 Thu ++1y> >> >> When I cycle the TODO-entry with c-c c-t it becomes >> >> SCHEDULED: <2025-03-01 Sat ++1y> > > This is expected. When we try to add 1 year to 2024-02-29, it is > 2025-02-29. However, because 02-29 does not exist in 2025, we glibc > takes the closest existing date and adds the difference in days: > 2025-02-28 + 1d = 2025-03-01. > > We apply the same logic to +1m repeaters: > > SCHEDULED: <2024-05-31 Fri ++1m> > will become > SCHEDULED: <2024-07-01 Mon ++1m> > since 2024-06-31 does not exist. > >> In my opinion it should become "2025-02-28 Fri" instead. Given the positive responses on changing the date rounding, I went ahead and tried to implement it (see the attached; note that some tests still need to be fixed to address the below divergence in edge cases). However, there are still some issues remaining. When updating timestamps repeating monthly across months with 30, 31, and 28 days we get <2025-01-31 Fri +1m> <2025-02-28 Fri +1m> <2025-03-28 Fri +1m> ... <2026-01-28 Wed +1m> As you can see, because we pass through February that only has 28 days, the timestamp tends to drift towards 28th within one year. With the existing approach the drift would not be much better though: <2025-01-31 Fri +1m> <2025-03-03 Mon +1m> <2025-03-03 Mon +1m> ... <2026-01-03 Sat +1m> I am wondering if we should do something with this kind of edge case. (Not that the proposed patch is going to make things worse, but maybe you have some ideas on what can be done, while we are at it)