Hola a todos. Necesito saber como calcular una nueva fecha a partir de la suma de cierto número de días a la fecha actual. Ejemplo Fecha Actual: 20040311 Días de Plazo: 30 días Fecha Nueva:20040409 ¿Alguien sabe? Gracias por su gran ayuda.
Bien, te hice esta función, espero que te sirva, cualquier cosa me lo dices. Abajo tienes un ejemplo de su aplicación. Si por alguna razón falla, me avisas. //Formato $fecha yyyymmdd function nextDate($fecha,$dias) { $diaActual = substr($fecha,6,2); $mesActual = $mesProx = substr($fecha,4,2); $anioActual = $anioProx = substr($fecha,0,4); $diaProx = $diaActual + $dias; $diasMes = cal_days_in_month(CAL_GREGORIAN, $mesActual, $anioActual); if ($diaProx > $diasMes) { $diaProx = $dias - ($diasMes - $diaActual); $mesProx = $mesActual + 1; if ($mesProx > 12) { $mesProx = "01"; $anioProx = $anioActual + 1; } $diasProxMes = cal_days_in_month(CAL_GREGORIAN, $mesProx, $anioProx); if ($diaProx > $diasProxMes) { $dias = $diaProx - $diasProxMes; $diaProx = (strlen($diaProx) == 1)?"0".$diaProx:$diaProx; $mesProx = (strlen($mesProx) == 1)?"0".$mesProx:$mesProx; return nextDate($anioProx.$mesProx.$diasProxMes,$dias); } } $diaProx = (strlen($diaProx) == 1)?"0".$diaProx:$diaProx; $mesProx = (strlen($mesProx) == 1)?"0".$mesProx:$mesProx; return $anioProx.$mesProx.$diaProx; } //ejemplo echo nextDate(Date("Ymd"),30);
Es posible que me puedas explicar el anterior código. Gracias
Acá te comento cada linea //Formato $fecha yyyymmdd function nextDate($fecha,$dias) { $diaActual = substr($fecha,6,2); //extraemos el dia $mesActual = $mesProx = substr($fecha,4,2); //extraemos el mes $anioActual = $anioProx = substr($fecha,0,4); //extraemos el año $diaProx = $diaActual + $dias; //sumamos el dia pasado en la fecha mas la cantidad de dias que queremos adelantar. $diasMes = cal_days_in_month(CAL_GREGORIAN, $mesActual, $anioActual); //averiguamos que cantidad de dias tiene el mes de la fecha ke pasamos if ($diaProx > $diasMes) { //si la suma de los dias supera la cantidad de dias k tiene el mes, debemos ir al mes siguiente. $diaProx = $dias - ($diasMes - $diaActual); //calculamos el exceso de dias $mesProx = $mesActual + 1; // como ya sabemos que pasamos los dias del mes, tenemos que pasar al mes siguiente. if ($mesProx > 12) { //si el mes es mayor a 12, tenemos que cambiar el año, y el mes pasa a ser el primero. $mesProx = "01"; $anioProx = $anioActual + 1; } $diasProxMes = cal_days_in_month(CAL_GREGORIAN, $mesProx, $anioProx); //nuevamente calculamos los dias del mes siguiente if ($diaProx > $diasProxMes) { //si el exceso de dias es mayor a la cantidad de dias del mes siguiente. $dias = $diaProx - $diasProxMes; //le restamos los dias del mes siguiente y preparamos la fecha para hacer una llamada recursiva a la funcion (esto es necesario asi va verificando mes a mes dependiendo la cantidad de dias que pongas, asi si pones 365 dias, sumara un año completo). $diaProx = (strlen($diaProx) == 1)?"0".$diaProx:$diaProx; $mesProx = (strlen($mesProx) == 1)?"0".$mesProx:$mesProx; return nextDate($anioProx.$mesProx.$diasProxMes,$dias); } } //si ya no supera la cantidad de dias del mes, se retorna la fecha en el formato pedido. $diaProx = (strlen($diaProx) == 1)?"0".$diaProx:$diaProx; $mesProx = (strlen($mesProx) == 1)?"0".$mesProx:$mesProx; return $anioProx.$mesProx.$diaProx; }