Muchas gracias andresdzphp por tu respuesta.
La he probado y estos son los resultados...
Cita:
Iniciado por andresdzphp
Con strtotime puedes hacer algo así:
Código PHP:
Ver originalfunction masxmeses($fecha, $meses, $formato) {
$masxmeses = strtotime("$fecha + $meses months");
if (date('j', $fe_i) != date('j', $masxmeses)) { return date($formato, strtotime('last day of last month', $masxmeses)); }
return date($formato, $masxmeses); }
echo masxmeses('2012-12-31', 2, 'd-m-Y'); //28-02-2013
Con esta me muestra 31-12-1969
Y con esta, debe de haber algún problema con el servidor...
Cita:
Iniciado por andresdzphp
o con DateTime así:
Código PHP:
Ver originalfunction masxmeses2($fecha, $meses, $formato) {
$date = new DateTime($fecha);
$fe_i = $date->format('j');
$date->modify("+$meses month");
$masxmeses = $date->format('j');
if ($fe_i != $masxmeses) {
$date->modify('last day of last month');
}
return $date->format($formato);
}
echo masxmeses2('2012-12-31', 2, 'd-m-Y'); //28-02-2013
porque me tira un warning:
Cita: Warning: DateTime::modify() [datetime.modify]: Failed to parse time string (last day of last month) at position 9 (o): The timezone could not be found in the database in /home/user/public_html/prueba.php on line 287
y me muestra la fecha de siempre: 03-03-2013
No conocía la opción "last day of last month", ahora no funciona, pero está bien saber que existe... Como no suelo trabajar mucho con fechas, me falta práctica, y mucha...
A ver si le atinamos con esta historia, que quiero aprender...
Mil gracias
.