Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] NO cuadra el MES

Estas en el tema de NO cuadra el MES en el foro de PHP en Foros del Web. Compañeros, estoy realizando un pequeño programa en PHP para recordar la próxima fecha de pago, cuando ingreso los datos por primera vez en el formulario ...
  #1 (permalink)  
Antiguo 17/03/2016, 08:11
Avatar de xPAPUx  
Fecha de Ingreso: diciembre-2013
Mensajes: 15
Antigüedad: 10 años, 4 meses
Puntos: 0
Exclamación NO cuadra el MES

Compañeros, estoy realizando un pequeño programa en PHP para recordar la próxima fecha de pago, cuando ingreso los datos por primera vez en el formulario ingreso la fecha en la que empieza el servicio, y deseo calcular el próximo pago a partir de esa fecha:

Actualmente lo hago así:

Código PHP:
$fecha $fechapago// fehcapago es la fecha donde inicia el servicio
$fechaprox strtotime '+1 month' strtotime $fecha ) ) ;
$fechaprox date 'Y-m-d' $fechaprox );
 
echo 
$fechaprox
El resultado es la suma del mes anterior mas 30 días calendario, pero mi problema radica en que por ejemplo si la fecha de inicio es el 28 de febrero el resultado se me muestra el día 2 de marzo, ahora mi pregunta es. ¿Como hago para que el me cuente el mes exacto, ya que el resultado debería ser por lo menos el 31 de marzo?
  #2 (permalink)  
Antiguo 17/03/2016, 08:43
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: NO cuadra el MES

Hola xPAPUx,

No acostumbro a dar el código hecho, pero creo que esto te servirá:

Código PHP:
Ver original
  1. //función para sumar meses a una fecha
  2. //retorna una fecha con los meses que se le han pasado, sumados
  3. function SumaMes($fecha, $meses, $formato) {
  4.       //Recibimos la fecha y la convertimos en un objeto de DateTime
  5.       $fecha = new DateTime($fecha);
  6.       //Preparamos el período en meses que le vamos a sumar
  7.       $periodo = "P" . $meses . "M";
  8.       //Sumamos el período pasado por parámetro
  9.       $fecha->add(new DateInterval($periodo));
  10.      
  11.       return $fecha->format($formato);
  12. }
  13.  
  14. //uso: SumaMes('17-03-2016', 1, 'd-m-Y'); //17-03-2016

Espero que te sirva.
  #3 (permalink)  
Antiguo 17/03/2016, 11:00
Avatar de xPAPUx  
Fecha de Ingreso: diciembre-2013
Mensajes: 15
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: NO cuadra el MES

Lo voy a ensayar y te cuento, mil gracias.
  #4 (permalink)  
Antiguo 17/03/2016, 20:27
Avatar de xPAPUx  
Fecha de Ingreso: diciembre-2013
Mensajes: 15
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: NO cuadra el MES

Cita:
Iniciado por rbczgz Ver Mensaje
Hola xPAPUx,

No acostumbro a dar el código hecho, pero creo que esto te servirá:

Código PHP:
Ver original
  1. //función para sumar meses a una fecha
  2. //retorna una fecha con los meses que se le han pasado, sumados
  3. function SumaMes($fecha, $meses, $formato) {
  4.       //Recibimos la fecha y la convertimos en un objeto de DateTime
  5.       $fecha = new DateTime($fecha);
  6.       //Preparamos el período en meses que le vamos a sumar
  7.       $periodo = "P" . $meses . "M";
  8.       //Sumamos el período pasado por parámetro
  9.       $fecha->add(new DateInterval($periodo));
  10.      
  11.       return $fecha->format($formato);
  12. }
  13.  
  14. //uso: SumaMes('17-03-2016', 1, 'd-m-Y'); //17-03-2016

Espero que te sirva.
Amigo el resultado de tu función es el mismo al de mis lineas de código, te pido disculpas ya que creo que no me explique en mi problema, mi código y tu código hacen lo mismo el resultado es igual, pero si ensayas ambos así: ingresas la fecha de pago 31 de enero del 2015 el resultado es en ambos es 2 de marzo de 2015. En ambos casos el código suma solo 30 días pero no tiene en cuenta si el mes es o no de 30, 31, o 28 días, ya que si se realiza el ingreso de fecha el 31 de x mes el cobro no va a ser el 30 del próximo sino el 1 del siguiente mes o viceversa.

De igual forma mil gracias por tu ayuda, espero si llegas a una solución respondas rapido.
  #5 (permalink)  
Antiguo 18/03/2016, 00:47
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: NO cuadra el MES

Hola

Esta función me la proporcionó un compañero de estos mismos foros, ahora no recuerdo quién fue, aunque me salvo "la papeleta", si alguien ve el post original, que agregue aquí los créditos correspondientes:

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

Espero que te sirva.
  #6 (permalink)  
Antiguo 19/03/2016, 07:20
Avatar de xPAPUx  
Fecha de Ingreso: diciembre-2013
Mensajes: 15
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: NO cuadra el MES

Cita:
Iniciado por rbczgz Ver Mensaje
Hola

Esta función me la proporcionó un compañero de estos mismos foros, ahora no recuerdo quién fue, aunque me salvo "la papeleta", si alguien ve el post original, que agregue aquí los créditos correspondientes:

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

Espero que te sirva.
No Solo a ti te salvo la papeleta, segun el gentilicio colombiano ¡ME SALVASTE EL CU**!

Mil gracias a ti y al que en algún momento hizo las lineas.
  #7 (permalink)  
Antiguo 19/03/2016, 13:56
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: NO cuadra el MES

Hola xPAPUx,

Aquí es España también se dice así, pero no quería que nadie se pudiera sentir ofendido, jejejeje.

Me alegro de que te haya servido.

Etiquetas: fecha, formulario
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




La zona horaria es GMT -6. Ahora son las 09:59.