No es que te falle es que no te preparaste para las fechas que son mayores a 30 días. Me refiero a esto. Cuando usas strtotime debes tener conciente que el va a buscar de acuerdo al día que se encuentra usando por ejemplo solamente
-1 Month. Si estamos a 1 de enero y quieres un mes para atrás el va a buscar el 1 del mes pasado, si vas a buscar el 15 pues busca el 15 del mes pasado, si estamos a 31 va a buscar el 31 del mes pasado, si el mes pasado no tiene 31 día entonces el siguiente día que es el 1 del mismo mes que se encuentra uno. Lo que te recomiendo que para evitar este tipo de situaciones siempre indiques un día en específico. Es decir usar strtotime algo así
De esa forma siempre te aseguras que busque el mes que corresponde porque todos los meses tienen el 1. Lo hice a vuelo no sé si hay que agregar o quitar algo, solo te estoy dando la idea para que lo puedas trabajar.
Edito: A mira sí funciona