Perhaps, as per your locale settings, it is taking into account the winter hour change (-1) that will take place precisely on October 29th at 03:00:00 (at least this is in most of Europe I think)
So, 1/10/2017 (let's suppose it assumes at 00:00:00) + 28 days ---> 29/10/2017 at 00:00:00
1/10/2017 (let's suppose it assumes at 00:00:00) + 29 days ---> 30/10/2017 at 00:00:00 minus 1hour --> 29/10/2017 at 23:00:00
to me it makes some sense.