Foros del Web » Programando para Internet » PHP »

Problema con Funcion de sumar fechas

Estas en el tema de Problema con Funcion de sumar fechas en el foro de PHP en Foros del Web. Hola a todos, estoy intentando hacer esta funcion para poder sumar dias, semanas y años a una fecha especifica, pero no logro hacerla funcionar.. alguien ...
  #1 (permalink)  
Antiguo 18/02/2012, 07:05
 
Fecha de Ingreso: mayo-2004
Mensajes: 102
Antigüedad: 20 años
Puntos: 5
Problema con Funcion de sumar fechas

Hola a todos, estoy intentando hacer esta funcion para poder sumar dias, semanas y años a una fecha especifica, pero no logro hacerla funcionar.. alguien podria ayudarme en que me estoy equivocando??
DEsde ya muchas gracias!
Bytes :)

Código PHP:
function dateadd($date$dd=0$mm=0$yy=0){

$date_r getdate(strtotime($date));
$date_result date('d/m/Y',
 
mktime(
 (
$date_r['mday']+$dd),
 (
$date_r['mon']+$mm),
 (
$date_r['year']+$yy)
 ));

return 
$date_result;

}
$hola dateadd('10/02/2012',0,2,0);
echo 
$hola
__________________
Bruno Quintana
  #2 (permalink)  
Antiguo 18/02/2012, 07:36
 
Fecha de Ingreso: enero-2009
Mensajes: 434
Antigüedad: 15 años, 3 meses
Puntos: 5
Respuesta: Problema con Funcion de sumar fechas

Código PHP:
function dateadd($date$dd=0$mm=0$yy=0){ 

$fecha explode("/"$date);

$dia $fecha[0]+$dd;
$mes $fecha[1]+$mm;
$year $fecha[2]+$yy;

return 
$result $dia."/".$mes."/".$year;



$hola dateadd('10/05/2012',0,2,0); 
echo 
$hola
Facil y sencillo
  #3 (permalink)  
Antiguo 18/02/2012, 07:52
 
Fecha de Ingreso: mayo-2004
Mensajes: 102
Antigüedad: 20 años
Puntos: 5
Respuesta: Problema con Funcion de sumar fechas

Estimado esunestudio
Muchas gracias por tu respuesta, pero bueno eso no es exactamente lo que estoy buscando que haga la funcion.

Me explico mejor, si a tu funcion le sumo 20 meses a una fecha especifica como puede ser 01/01/2012 el resultado es: 01/21/2012 mi idea era que al sumar 20 meses a esa fecha el resultado sea: 01/09/2013...

No se si me explico, igualmente te agradezco mucho por responder!"

Un saludo!
__________________
Bruno Quintana
  #4 (permalink)  
Antiguo 18/02/2012, 08:25
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con Funcion de sumar fechas

mmm en vez de estar sumando como si fueran simples números porque no usas las funciones de PHP para manejar fechas...

Código PHP:
Ver original
  1. $fecha = '2012-02-18 00:00:00';
  2. echo date('d/m/Y H:i:s',  strtotime($fecha.' +20 month');
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 18/02/2012, 09:50
 
Fecha de Ingreso: mayo-2004
Mensajes: 102
Antigüedad: 20 años
Puntos: 5
Respuesta: Problema con Funcion de sumar fechas

Gracias a todos los que han respondido al final gracias a todos los mensajes los he digamos que juntados todo y he logrado entonces hacer la funcion como queria, la comparto aqui por si a alguien mas le resulta util:

Código PHP:
function sumar_fechas($fecha_inicioo,$numerdo_de_semanas){
    
$fecha_inicio explode("/",$fecha_inicioo);
    
$fecha_regular $fecha_inicio[1].'-'.$fecha_inicio[0].'-'.$fecha_inicio[2];
    
$fecha $fecha_regular.' 00:00:00';
    
$resultadito date('d/m/Y H:i:s',  strtotime($fecha.'+'.$numerdo_de_semanas.' week'));
    return 
$resultadito;
}
echo 
sumar_fechas("01/01/2011","2"); // Devuelve la fecha sumandole dos semanas. 
__________________
Bruno Quintana
  #6 (permalink)  
Antiguo 20/01/2013, 17:36
 
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

Cita:
Iniciado por Nemutagk Ver Mensaje
mmm en vez de estar sumando como si fueran simples números porque no usas las funciones de PHP para manejar fechas...

Código PHP:
Ver original
  1. $fecha = '2012-02-18 00:00:00';
  2. echo date('d/m/Y H:i:s',  strtotime($fecha.' +20 month');
Hola a todos,

Ya sé que es reabrir un tema antiguo, pero está totalmente relacionado con el asunto que vengo a consultar, que es lo siguiente:

Según el código de Nemutagk, las sumas son de meses de 30 días, independientemente de si es bisiesto, si es enero (31) o es abril (30).

Bien, aquí viene el problema que yo tengo... Lo que necesito es poder sumar un período de tiempo, sean días, meses o años, pero teniendo en cuenta la duración de los meses involucrados en la operación, es decir, si por ejemplo a la fecha 31/12/2012 le sumo 2 meses, el resultado debería ser 28/02/2013, no 03/03/2013 como resulta de todas las pruebas que he estado haciendo, prácticamente todas con mktime, strtotime y DateTime.

Agradecería mucho una ayuda para ver por donde puedo tirar, porque ahora mismo, no tengo ni idea...

Estas dos opciones son las que mas me han roto la cabeza, por lo que he mencionado antes, con DateTime no he podido hacer nada porque me tira un error de que no encuentra la clase:

Mediante una función:

Código PHP:
Ver original
  1. function add_fecha($fecha_dada,$mes) {
  2. list($diai,$mesi,$anioi) = explode('/',$fecha_dada);
  3. $fecha_final = date('d/m/Y', mktime(0,0,0, $mesi+$mes, $diai, $anioi));
  4. return $fecha_final;
  5. }
  6.  
  7. echo "Fecha final (31/12/2012 + 2 meses): ". add_fecha('31/12/2012',2);

Con esta me suma 3 días más, es decir, sale 03/03/2013

Y esta, que es directamente con strtotime:

Código PHP:
Ver original
  1. $fecha = '2011-12-31';
  2. echo "Fecha final (31/12/2012 + 2 meses): ". date('d/m/Y',  strtotime($fecha.' +2 month') );

Y con esta me suma 2 días más, es decir, sale 02/03/2013

Espero que alguien me pueda echar un cable...

.
  #7 (permalink)  
Antiguo 20/01/2013, 18:47
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con Funcion de sumar fechas

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

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
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #8 (permalink)  
Antiguo 20/01/2013, 19:32
 
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

.
  #9 (permalink)  
Antiguo 20/01/2013, 19:34
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con Funcion de sumar fechas

¿Qué versión de PHP estás usando? Ese ejemplo en PHP 5.4 me funciona perfectamente de las 2 formas.

Edito: necesitas mínimo PHP 5.3.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 20/01/2013 a las 19:41
  #10 (permalink)  
Antiguo 20/01/2013, 19:42
 
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

Cita:
Iniciado por andresdzphp Ver Mensaje
¿Qué versión de PHP estás usando? Ese ejemplo en PHP 5.4 me funciona perfectamente de las 2 formas.
Pues va a ser por eso, yo tengo la 5.2.17 ... Y ahora ¿quién podrá ayudarme?

¿Se te ocurre cómo hacerlo andar en esta versión?

Muchas gracias de nuevo.

.
  #11 (permalink)  
Antiguo 20/01/2013, 20:05
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con Funcion de sumar fechas

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

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.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 20/01/2013 a las 20:39
  #12 (permalink)  
Antiguo 21/01/2013, 01:31
 
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

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!!

.
  #13 (permalink)  
Antiguo 21/01/2013, 11:28
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con Funcion de sumar fechas

A ver te explico el código que te funcionó:

Código PHP:
Ver original
  1. function masxmeses3($fecha, $meses) {
  2.     $f = explode('-', $fecha);
  3.     //sacamos con explode la fecha separada en dia-mes-año
  4.     $fe_i = mktime(0, 0, 0, $f[1], $f[0], $f[2]);
  5.     //se lo pasamos a mktime como fecha inicial $f[1] = mes,
  6.     //$f[0] = dia,  $f[2] = año, así como lo pide mktime que se lo  
  7.     //pasemos.
  8.     $masxmeses = mktime(0, 0, 0, $f[1]+$meses, $f[0], $f[2]);
  9.     //sumamos los meses $f[1]+$meses
  10.  
  11.     if (date('j', $fe_i) != date('j', $masxmeses)) {
  12.         return date('t-m-Y', mktime(0, 0, 0, $f[1]+$meses, ($f[0]-date('j', $fe_i))+1, $f[2]));
  13.     }
  14.     //Comparamos si el día inicial es diferente al día final (la j en date es el día del mes sin ceros iniciales),
  15.     //si lo es, es porque se pasó a otro mes y en ese caso lo debemos devolver.
  16.    
  17.     //return del condicional lo que hace es, sumar los meses pero restarle los días
  18.     //que nos sobran para que se devuelva a 28 (o lo que necesite) eso hace
  19.     //($f[0]-date('j', $fe_i))+1
  20.    
  21.     //t-m-Y la t en el date es el último día del mes
  22.    
  23.     return date('d-m-Y', $masxmeses);
  24.     //en caso de que los días sean iguales lo devolvemos normal,
  25.     //sumando los 2 meses.
  26. }
  27.  
  28. echo masxmeses3('31-12-2012', 2); //28-02-2013

creo que DateTime te falla porque en esa versión no se permite esto:

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

Puedes probar así:

Código PHP:
Ver original
  1. function masxmeses4($fecha, $meses, $formato) {
  2.       $dt = new DateTime($fecha);
  3.       //inicializamos el objeto DateTime con la fecha
  4.       $fe_i = $dt->format('j');
  5.       //sacamos el día de esa fecha inicial
  6.      
  7.       $dt->modify("+$meses month");
  8.       //le sumamos los meses a esa fecha inicial
  9.       $masxmeses = $dt->format('j');
  10.       //sacamos el día que nos dió al sumarle los meses
  11.      
  12.       if ($fe_i != $masxmeses) {
  13.           //si son diferentes (se pasó a otro mes)
  14.           $dt->modify("-$masxmeses days");
  15.           //le restamos los días que se pasó
  16.           return $dt->format($formato);
  17.           //devolvemos esa fecha restandole los días
  18.       }
  19.      
  20.       //si son iguales los dias es porque no se pasó
  21.       //devolvemos la fecha + 2 meses
  22.       return $dt->format($formato);
  23. }
  24.  
  25. echo masxmeses4('31-12-2012', 2, 'd-m-Y'); //28-02-2013

Cualquier cosa comenta.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 21/01/2013 a las 11:34
  #14 (permalink)  
Antiguo 21/01/2013, 11:35
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Problema con Funcion de sumar fechas

Tambien es posible usar strtotime junto con date o datetime así como en el ejemplo que te expusieron anterior a este comentario
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 21/01/2013, 13:08
 
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

Genial!! Muchas gracias por la explicación.

Cita:
Iniciado por andresdzphp Ver Mensaje
A ver te explico el código que te funcionó:

Código PHP:
Ver original
  1. function masxmeses3($fecha, $meses) {
  2.     $f = explode('-', $fecha);
  3.     //sacamos con explode la fecha separada en dia-mes-año
  4.     $fe_i = mktime(0, 0, 0, $f[1], $f[0], $f[2]);
  5.     //se lo pasamos a mktime como fecha inicial $f[1] = mes,
  6.     //$f[0] = dia,  $f[2] = año, así como lo pide mktime que se lo  
  7.     //pasemos.
  8.     $masxmeses = mktime(0, 0, 0, $f[1]+$meses, $f[0], $f[2]);
  9.     //sumamos los meses $f[1]+$meses
  10.  
  11.     if (date('j', $fe_i) != date('j', $masxmeses)) {
  12.         return date('t-m-Y', mktime(0, 0, 0, $f[1]+$meses, ($f[0]-date('j', $fe_i))+1, $f[2]));
  13.     }
  14.     //Comparamos si el día inicial es diferente al día final (la j en date es el día del mes sin ceros iniciales),
  15.     //si lo es, es porque se pasó a otro mes y en ese caso lo debemos devolver.
  16.    
  17.     //return del condicional lo que hace es, sumar los meses pero restarle los días
  18.     //que nos sobran para que se devuelva a 28 (o lo que necesite) eso hace
  19.     //($f[0]-date('j', $fe_i))+1
  20.    
  21.     //t-m-Y la t en el date es el último día del mes
  22.    
  23.     return date('d-m-Y', $masxmeses);
  24.     //en caso de que los días sean iguales lo devolvemos normal,
  25.     //sumando los 2 meses.
  26. }
  27.  
  28. echo masxmeses3('31-12-2012', 2); //28-02-2013
¿Sabes que te podrías ganar la vida dando clases? Se entiende todo perfectamente.

De hecho, si los moderadores (no sé si los colaboradores también podéis) lo aprueban, creo que se debería extractar y colocar como aporte, con su explicación y todo, porque está fantástica.

Cita:
Iniciado por andresdzphp Ver Mensaje
creo que DateTime te falla porque en esa versión no se permite esto:

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

Puedes probar así:

Código PHP:
Ver original
  1. function masxmeses4($fecha, $meses, $formato) {
  2.       $dt = new DateTime($fecha);
  3.       //inicializamos el objeto DateTime con la fecha
  4.       $fe_i = $dt->format('j');
  5.       //sacamos el día de esa fecha inicial
  6.      
  7.       $dt->modify("+$meses month");
  8.       //le sumamos los meses a esa fecha inicial
  9.       $masxmeses = $dt->format('j');
  10.       //sacamos el día que nos dió al sumarle los meses
  11.      
  12.       if ($fe_i != $masxmeses) {
  13.           //si son diferentes (se pasó a otro mes)
  14.           $dt->modify("-$masxmeses days");
  15.           //le restamos los días que se pasó
  16.           return $dt->format($formato);
  17.           //devolvemos esa fecha restandole los días
  18.       }
  19.      
  20.       //si son iguales los dias es porque no se pasó
  21.       //devolvemos la fecha + 2 meses
  22.       return $dt->format($formato);
  23. }
  24.  
  25. echo masxmeses4('31-12-2012', 2, 'd-m-Y'); //28-02-2013

Cualquier cosa comenta.

Saludos.
Así sí que ha funcionado perfectamente también, me quedo con la otra, pero esta también funciona así.

Y puestos a rizar el rizo, como aprendizaje y por si se quiere poner como aporte ¿se podría modificar para que admitiera la suma de días, meses y años o solo de alguna de las opciones?

Esto no me hace falta ahora mismo, pero siempre está bien aprender, y si se puede, pues más que aprenderemos... y si además, se coloca como aporte, pues estará más completo...

¡¡¡Un millón de gracias!!!

Cita:
Iniciado por abimaelrc Ver Mensaje
Tambien es posible usar strtotime junto con date o datetime así como en el ejemplo que te expusieron anterior a este comentario
Gracias por la idea abimaelrc, pero, como decía en un post anterior, no trabajo mucho con fechas más allá de mostrarlas y guardarlas, se me escapa a mis conocimientos.

.
  #16 (permalink)  
Antiguo 21/01/2013, 13:14
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con Funcion de sumar fechas

Si, se puede modificar para sumar días, meses, años, semanas, y lo que se te ocurra. Sólo necesitas entender las funciones y los métodos.

Te recomiendo que uses la clase DateTime para evitar problemas con el año 2038.

Edito: Con la que piensas usar no podrías hacer esto:

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.           $dt->modify("-$masxmeses days");
  10.           return $dt->format($formato);
  11.       }
  12.  
  13.       return $dt->format($formato);
  14. }
  15.  
  16. echo masxmeses4('31-12-2039', 2, 'd-m-Y'); //29-02-2040

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 21/01/2013 a las 13:23
  #17 (permalink)  
Antiguo 22/01/2013, 02:07
 
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

Cita:
Iniciado por andresdzphp Ver Mensaje
Si, se puede modificar para sumar días, meses, años, semanas, y lo que se te ocurra. Sólo necesitas entender las funciones y los métodos.

Te recomiendo que uses la clase DateTime para evitar problemas con el año 2038.

Edito: Con la que piensas usar no podrías hacer esto:

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.           $dt->modify("-$masxmeses days");
  10.           return $dt->format($formato);
  11.       }
  12.  
  13.       return $dt->format($formato);
  14. }
  15.  
  16. echo masxmeses4('31-12-2039', 2, 'd-m-Y'); //29-02-2040

Saludos.
Gracias andresdzphp, me has convencido, tienes toda la razón, aunque para ese año espero no tener que estar trabajando, por lo menos, los sistemas que deje funcionando, que sigan sin fallar, al menos en lo que respecta a las fechas...

Y ya que estoy, intentaré hacer lo que dices, documentarme sobre las funciones y los métodos y ver si consigo hacer una función que permita sumar (y ya puestos, restar) cualquier período de tiempo, sean días, meses o años.

El problema es que revisando el manual, no he conseguido encontrar información que yo sea capaz de entender sobre DateTime ¿se te ocurre algún sitio, a ser posible en español, donde pueda documentarme? Digo en español porque, si así ya me cuesta, ni te cuento lo que me puede costar si lo tengo que ver en inglés, que no entiendo ni la mitad...

Bueno, a ver si sale algo, si lo consigo, la postearé aquí por si alguien la necesita.

Muchas gracias de nuevo.

.

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:19.