PHP strtotime comportamento de +1 mês

Eu sei sobre o comportamento indesejado da função do PHP

strtotime

Por exemplo, ao adicionar um mês (+1 mês) a datas como: 31.01.2011 -> 03.03.2011

I sei que não é oficialmente umPHP bug, e que esta solução possui alguns argumentos, mas pelo menos para mim, esse comportamento causou muito desperdício de tempo (no passado e no presente) e eu pessoalmente odeio isso.

O que eu achei ainda mais estranho é que, por exemplo, em:

MySQL: DATE_ADD ('2011-01-31', INTERVAL 1 MONTH) retorna 28/02/2011 ou

C # where new DateTime (2011, 01, 31) .AddMonths (1); retornará 28.02.2011

wolframalpha.com dando31.01.2013 + 1 month como entrada; retornará quinta-feira, 28 de fevereiro de 2013

Parece-me que outros encontraram uma solução mais decente para a pergunta estúpida que eu vi muito nos relatórios de erros do PHP "que dia será, se eu disser que nos encontraremos daqui a um mês" ou algo assim. A resposta é: se 31 não existir no próximo mês, consiga o último dia desse mês, masor favor, atenha-se ao próximo mê

Então, minha pergunta é: existe uma função PHP (escrita por alguém) que resolve esse bug não reconhecido oficialmente? Como não acho que sou o único que deseja outro comportamento ao adicionar / subtrair meses.

Estou particularmente interessado em soluções que também funcionam não apenas no final do mês, mas uma substituição completa destrtotime. Também o casostrotime +n months também deve ser tratado.

Happy coding!

questionAnswers(8)

yourAnswerToTheQuestion