Pregunta

¿Cómo agrego un cierto número de días a la fecha actual en PHP?

Ya tengo la fecha actual con:

$today = date('y:m:d');

Solo necesito agregarle x número de días

¿Fue útil?

Solución

php admite funciones de fecha de estilo c. Puede agregar o restar períodos de fecha con frases de estilo en inglés a través de la función strtotime . ejemplos ...

$Today=date('y:m:d');

// add 3 days to date
$NewDate=Date('y:m:d', strtotime("+3 days"));

// subtract 3 days from date
$NewDate=Date('y:m:d', strtotime("-3 days"));

// PHP returns last sunday's date
$NewDate=Date('y:m:d', strtotime("Last Sunday"));

// One week from last sunday
$NewDate=Date('y:m:d', strtotime("+7 days Last Sunday"));

o

<select id="date_list" class="form-control" style="width:100%;">
<?php
$max_dates = 15;
$countDates = 0;
while ($countDates < $max_dates) {
    $NewDate=Date('F d, Y', strtotime("+".$countDates." days"));
    echo "<option>" . $NewDate . "</option>";
    $countDates += 1;
}
?>

Otros consejos

un día es 86400 segundos.

$tomorrow = date('y:m:d', time() + 86400);

La forma más simple de agregar x no. de días ..

echo date('Y-m-d',strtotime("+1 day"));    //+1 day from today

O desde la fecha especificada ...

echo date('Y-m-d',strtotime("+1 day", strtotime('2007-02-28')));

El date_add () La función debe hacer lo que quieras. Además, consulte los documentos (no oficiales, pero los oficiales son un poco escasos) para el DateTime , es mucho más agradable trabajar con las funciones de procedimiento en PHP.

Con php 5.3

    $date = new DateTime();
    $interval = new DateInterval('P1D');
    echo $date->format('Y-m-d') , PHP_EOL;
    $date->add($interval);
    echo $date->format('Y-m-d'), PHP_EOL;
    $date->add($interval);
    echo $date->format('Y-m-d'), PHP_EOL;

generará

2012-12-24

2012-12-25

2012-12-26

Si necesita este código en varios lugares, le sugiero que agregue una función corta para mantener su código más simple y fácil de probar.

function add_days( $days, $from_date = null ) {
    if ( is_numeric( $from_date ) ) { 
        $new_date = $from_date; 
    } else { 
        $new_date = time();
    }

    // Timestamp is the number of seconds since an event in the past
    // To increate the value by one day we have to add 86400 seconds to the value
    // 86400 = 24h * 60m * 60s
    $new_date += $days * 86400;

    return $new_date;
}

Entonces puedes usarlo en cualquier lugar como este:

$today       = add_days( 0 );
$tomorrow    = add_days( 1 );
$yesterday   = add_days( -1 );
$in_36_hours = add_days( 1.5 );

$first_reminder  = add_days( 10 );
$second_reminder = add_days( 5, $first_reminder );
$last_reminder   = add_days( 3, $second_reminder );

Agregue 15 días a un elemento seleccionado (usando la sugerencia "Vivo a morir")

<select id="date_list" class="form-control" style="width:100%;">
<?php
$max_dates = 15;
$countDates = 0;
while ($countDates < $max_dates) {
    $NewDate=Date('F d, Y', strtotime("+".$countDates." days"));
    echo "<option>" . $NewDate . "</option>";
    $countDates += 1;
}
?>

$NewDate=Date('Y-m-d', strtotime("+365 days"));
  

echo $ NewDate; // 2020-05-21

$ NewTime = mktime (fecha ('G'), fecha ('i'), fecha ('s'), fecha ('n'), fecha ('j') + $ DaysToAdd, fecha ('Y'));

De documentación de mktime :

  

mktime () es útil para realizar aritmética y validación de fechas, ya que calculará automáticamente el valor correcto para la entrada fuera de rango.

La ventaja de este método es que puede sumar o restar cualquier intervalo de tiempo (horas, minutos, segundos, días, meses o años) en una línea de código fácil de leer.

Tenga en cuenta que hay una compensación en el rendimiento, ya que este código es aproximadamente 2.5 veces más lento que el tiempo de arranque (" +1 día ") debido a todas las llamadas a la función date (). Considere reutilizar esos valores si está en un bucle.

<?php
$dt = new DateTime;
if(isset(<*>GET['year']) && isset(<*>GET['week'])) {
    $dt->setISODate(<*>GET['year'], <*>GET['week']);
} else {
    $dt->setISODate($dt->format('o'), $dt->format('W'));
}
$year = $dt->format('o');
$week = $dt->format('W');
?>

<a href="<?php echo <*>SERVER['PHP_SELF'].'?week='.($week-1).'&year='.$year; ?>">Pre Week</a> 
<a href="<?php echo <*>SERVER['PHP_SELF'].'?week='.($week+1).'&year='.$year; ?>">Next Week</a>
<table width="100%" style="height: 75px; border: 1px solid #00A2FF;">
<tr>
<td style="display: table-cell;
    vertical-align: middle;
    cursor: pointer;
    width: 75px;
    height: 75px;
    border: 4px solid #00A2FF;
    border-radius: 50%;">Employee</td>
<?php
do {
    echo "<td>" . $dt->format('M') . "<br>" . $dt->format('d M Y') . "</td>\n";
    $dt->modify('+1 day');
} while ($week == $dt->format('W'));
?>
</tr>
</table>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top