strtotime te podría servir para tu propósito. Mas información aquí:
http://cl.php.net/strtotime
Sin embargo, tuve que hacer algo similar y no me acuerdo ahora la razón pero había descartado esa función, pero creo que era porque en fechas superiores a 28 días el mes de febrero no se adaptaba y pasaba al marzo, axial que hice lo siguiente:
Código PHP:
// convierto la fecha obtenida de la base de datos a timestamp
$vcto_cuota = strtotime($vcto_cuota->vcto_cuota);
// obtengo el dia de la primera cuota
$dia_cuota_1 = date('d', $vcto_cuota);
// obtengo el mes de la primera cuota
$mes_cuota_1 = date('m', $vcto_cuota);
// obtengo el año de la primera cuota
$anio_cuota_1 = date('Y', $vcto_cuota);
$dia = $dia_cuota_1;
$mes = $mes_cuota_1;
$anio = $anio_cuota_1;
for($i = 1; $i <= $matricula->cuotas; $i++) {
$vcto_cuotas[$i]['d'] = $dia;
$vcto_cuotas[$i]['m'] = $mes;
$vcto_cuotas[$i]['a'] = $anio;
if($mes >= 12) {
$mes = 1;
$anio++;
} else {
$mes++;
}
if($mes == 2 && $dia_cuota_1 > 28) {
$dia = 28;
} else {
$dia = $dia_cuota_1;
}
}
Espero que te sirva. Saludos.