Ver Mensaje Individual
  #8 (permalink)  
Antiguo 20/01/2013, 19:32
rbczgz
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Problema con Funcion de sumar fechas

Muchas gracias andresdzphp por tu respuesta.

La he probado y estos son los resultados...

Cita:
Iniciado por andresdzphp Ver Mensaje
Con strtotime puedes hacer algo así:

Código PHP:
Ver original
  1. function masxmeses($fecha, $meses, $formato) {
  2.     $fe_i = strtotime($fecha);
  3.     $masxmeses = strtotime("$fecha + $meses months");
  4.    
  5.     if (date('j', $fe_i) != date('j', $masxmeses)) {
  6.         return date($formato, strtotime('last day of last month', $masxmeses));
  7.     }
  8.    
  9.     return date($formato, $masxmeses);
  10. }
  11.  
  12. 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 Ver Mensaje
o con DateTime así:

Código PHP:
Ver original
  1. function masxmeses2($fecha, $meses, $formato) {
  2.     $date = new DateTime($fecha);
  3.     $fe_i = $date->format('j');
  4.    
  5.     $date->modify("+$meses month");
  6.     $masxmeses = $date->format('j');
  7.    
  8.     if ($fe_i != $masxmeses) {
  9.         $date->modify('last day of last month');
  10.     }
  11.    
  12.     return $date->format($formato);
  13. }
  14.  
  15. 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

.