Operaciones con fechas

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.
Respuesta
1
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;
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas