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 */