PHP – Date – Sumar días naturales
Función que suma un numero determinado de días naturales a una fecha en formato yyyy-mm-dd.
La fecha original no se modifica y devuelve la nueva fecha con los días sumados.
/**
* Class HelperDate
*/
abstract class HelperDate
{
/**
* Suma N días naturales a una fecha.
* Formato de fecha: yyyy-mm-dd
*
* @param string $fecha
* @param int $dias
*
* @return string
*/
public static function sumarDiasNaturales($fecha, $dias)
{
if ($dias < 0) {
return '';
}
$dateArray = explode("-", $fecha);
$sd = $dias;
while ($sd > 0) {
if ($sd <= date("t", mktime(0, 0, 0,
$dateArray[ 1 ],
1,
$dateArray[ 0 ])
) - $dateArray[ 2 ]) {
$dateArray[ 2 ] = $dateArray[ 2 ] + $sd;
$sd = 0;
} else {
$sd = $sd - ( date( "t", mktime(0, 0, 0,
$dateArray[ 1 ],
1,
$dateArray[ 0 ])
) - $dateArray[ 2 ]);
$dateArray[ 2 ] = 0;
if ($dateArray[ 1 ] < 12) {
$dateArray[ 1 ]++;
} else {
$dateArray[ 1 ] = 1;
$dateArray[ 0 ]++;
}
}
}
$sDia = '00'.$dateArray[ 2 ];
$sDia = substr($sDia, -2);
$sMes = '00'.$dateArray[ 1 ];
$sMes = substr($sMes, -2);
return $dateArray[ 0 ].'-'.$sMes.'-'.$sDia;
}
}
Ejemplos
$dia = HelperDate::sumarDiasNaturales('1999-12-31', 1);
/* 2000-01-01 */
$dia = HelperDate::sumarDiasNaturales('1999-1-31', 28);
/* 1999-02-28 */
$dia = HelperDate::sumarDiasNaturales('2000-11-10', 100);
/* 2001-02-17 */
