<?php date_default_timezone_set('America/Sao_Paulo'); echo AddMesVencimentoAcordo("2010-01-31",0)."\n"; echo AddMesVencimentoAcordo("2010-01-31",1)."\n"; echo AddMesVencimentoAcordo("2010-01-31",2)."\n"; echo AddMesVencimentoAcordo("2010-01-31",3)."\n"; echo AddMesVencimentoAcordo("2010-01-31",4)."\n"; echo AddMesVencimentoAcordo("2010-01-31",5)."\n"; echo AddMesVencimentoAcordo("2010-01-31",16)."\n"; echo AddMesVencimentoAcordo("2010-01-31",23)."\n"; /* Descomentar uma das linhas de retorno, dependendo da opção que quiser... */ function AddMesVencimentoAcordo($data,$add) { $data = strtotime($data); $dia = date("d",$data); $mes = date("m",$data) + $add; $ano = date("Y",$data); $ano+= intval($mes / 12); $mes = $mes % 12; if ($mes == 0) { $mes = 12; //Pequeno Fix para Mes % 12 = 0 fica invalida a data e ele retornava o último dia do mês $ano--; //Fix Bug que eu não sabia } if (checkdate($mes,$dia,$ano)) return date("Y-m-d",strtotime("$ano-$mes-$dia")); else //return date("Y-m-t",strtotime("$ano-$mes-01")); //Se quiser antecipar para o último dia do mês... return date("Y-m-d",strtotime("+1 Day",strtotime(date("Y-m-t",strtotime("$ano-$mes-01"))))); //Se quiser passar pra o primeiro dia do próximo mês... } ?>