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

Hola de nuevo,

Muchas gracias por tu ayuda y por tanta rapidez...

Cita:
Iniciado por andresdzphp Ver Mensaje
Creo que esto funcionaría, no lo he probado 100% pero al parecer funciona:

Código PHP:
Ver original
  1. function masxmeses3($fecha, $meses) {
  2.     $f = explode('-', $fecha);
  3.     $fe_i = mktime(0, 0, 0, $f[1], $f[0], $f[2]);
  4.     $masxmeses = mktime(0, 0, 0, $f[1]+$meses, $f[0], $f[2]);
  5.    
  6.     if (date('j', $fe_i) != date('j', $masxmeses)) {
  7.         return date('t-m-Y', mktime(0, 0, 0, $f[1]+$meses, ($f[0]-date('j', $fe_i))+1, $f[2]));
  8.     }
  9.    
  10.     return date('d-m-Y', $masxmeses);
  11. }
  12.  
  13. echo masxmeses3('31-12-2012', 2); //28-02-2013
¡¡GENIO!! ¡¡Eres un genio!! Esta funciona de fábula, es justo lo que necesitaba, pero, ahora viene lo bueno, si no es abusar... ¿me puedes explicar detalladamente lo que hace cada línea? Así, además de solucionar el problema, aprendo un poco más, aprovechando tus tremendos conocimentos.

Cita:
Iniciado por andresdzphp Ver Mensaje
Edito: Así también puede servir con DateTime (Tampoco probado al 100%)

Código PHP:
Ver original
  1. function masxmeses4($fecha, $meses, $formato) {
  2.       $dt = new DateTime($fecha);
  3.       $fe_i = $dt->format('j');
  4.      
  5.       $dt->modify("+$meses month");
  6.       $masxmeses = $dt->format('j');
  7.      
  8.       if ($fe_i != $masxmeses) {
  9.           return $dt->modify("-$masxmeses days")->format($formato);
  10.       }
  11.      
  12.       return $dt->format($formato);
  13. }
  14.  
  15. echo masxmeses4('31-12-2012', 2, 'd-m-Y'); //28-02-2013

Cualquier cosa avisa y lo seguimos mirando.

Saludos.
Esta me da un error también, como la anterior de DateTime :

Cita:
Fatal error: Call to a member function format() on a non-object in /home/user/public_html/prueba.php on line 290
La línea 290 es:

Código PHP:
Ver original
  1. return $dt->modify("-$masxmeses days")->format($formato);

El tema se podría considerar resuelto, pero estaría bien saber por qué no funciona la opción con DateTime y, lo mismo que antes, si no es abusar, saber qué hace cada línea... Siempre aprendiendo y nunca se sabe la solución que se necesita cuando se necesita...

Muchas gracias otra vez, además, con rapidez... ¡¡Qué maravilla!!

.