Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Error date php en dias 30 y 31

Estas en el tema de Error date php en dias 30 y 31 en el foro de PHP en Foros del Web. Buen dia comunidad veran tengo un ciclo for que maneja fechas sumandoles un mes segun el numero de veces de plazo el codigo es el ...
  #1 (permalink)  
Antiguo 12/01/2016, 11:51
 
Fecha de Ingreso: agosto-2015
Ubicación: El Salvador
Mensajes: 17
Antigüedad: 9 años, 3 meses
Puntos: 0
Error date php en dias 30 y 31

Buen dia comunidad veran tengo un ciclo for que maneja fechas sumandoles un mes segun el numero de veces de plazo el codigo es el siguiente:

Código PHP:
$fechacreado=date("Y-m-d");
$plazo=14;

$mes=0;




    for (
$contador=1$contador $plazo $contador++) { 
        

         echo 
date"Y-m-d"strtotime"+".$mes." month" ) );
        echo 
"<br>";
        
$mes++;
    } 
y el resultado es el siguiente:

2016-01-12
2016-02-12
2016-03-12
2016-04-12
2016-05-12
2016-06-12
2016-07-12
2016-08-12
2016-09-12
2016-10-12
2016-11-12
2016-12-12
2017-01-12



el problema es cuando la fecha que se captura es 30 o 31 y cuando se suma el mes da una fecha incorrecta por ejemplo si ahora fuera 30 de enero del 2016 al sumarle el mes seria 30 de febrero del 2016 algo completamente erroneo lo que busco areglar es restarle tres dias ala fecha actual por ejemplo si fuera 30 de enero menos los dos dias seria 27 de enero y siendo asi me generaria la misma secuencia mes a mes he creado la siguiente logica y adaptado al codigo anterior para ver su resultado. el codigo es el siguiente:
Código PHP:
$fechacreado=date("Y-m-d");
$plazo=14;

$mes=0;

/*  logica   */
$dia=date("d");
                        
                           if (
$dia == 31 || $dia == 30) {
                               
$dia date('Y-m-d');
                               
                               
$dia strtotime '-3 day' strtotime $dia ) ) ;
                               
$dia date 'd' $dia );

                           }
/*  logica   */

    
for ($contador=1$contador $plazo $contador++) { 
        

         echo 
date$dia."-F-Y"strtotime"+".$mes." month" ) );
        echo 
"<br>";
        
$mes++;
    } 
cuando cambio la fecha a 30 o 31 me muestra el siguiente resultado al imprimir:

28-January-2016
28-March-2016
28-March-2016
28-April-2016
28-May-2016
28-June-2016
28-July-2016
28-August-2016
28-September-2016
28-October-2016
28-November-2016
28-December-2016
28-January-2017


el error es que se salta el mes de febrero cuando en realidad tendria que mostrarlo porque el dia 28 si es un dia de el mes de febrero segun calendario

si tienen una idea de como solventarlo se los agradeceria o si tienen un metodo diferente usando años bisiestos o no bisiestos para evitar restar dias si cae en 30 o 31 y al saltar al siguiente mes da erroneo se los agradeceria mucho ya que no se que solucion darle
  #2 (permalink)  
Antiguo 12/01/2016, 12:58
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, 6 meses
Puntos: 1517
Respuesta: Error date php en dias 30 y 31

Acuerdate que 31 en otro mes no es viable y te brinda la fecha siguiente. Mira este ejemplo de como se maneja las fechas a ver si te puede brindar luz de como hacerlo. http://www.forosdelweb.com/f18/aporte-calendario-831709
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 12/01/2016, 13:46
 
Fecha de Ingreso: agosto-2015
Ubicación: El Salvador
Mensajes: 17
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Error date php en dias 30 y 31

el ejemplo que me diste esta muy bien pero no aplica para solucion de mi problema al menos yo no he podido despejarme de dudas al verlo
  #4 (permalink)  
Antiguo 12/01/2016, 15:12
 
Fecha de Ingreso: agosto-2015
Ubicación: El Salvador
Mensajes: 17
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Error date php en dias 30 y 31

me respondo ami misma pregunta quedo de la siguiente manera:

Código PHP:

$plazo
=14;

$mes=0;

$dia=date("d");
                        
                          


    for (
$contador=1$contador $plazo $contador++) { 
        

              
                              if (
$dia == 31 || $dia == 30 || $dia==29 || $dia==28  ) {
                                
                                        
                                        

                                     echo 
date"d-F-Y"strtotime"last day of this month +".$mes." month" ) ); 
                                     
                                     echo 
"<br>";
                           }
                           else
                           {
                            
                                     echo 
date"d-F-Y"strtotime"+".$mes." month" ) ); 
                                     
                                     echo 
"<br>";
                           }
        
        
$mes++;
    } 

Etiquetas: date
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 13:03.