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