60

How do I add a certain number of days to the current date in PHP?

I already got the current date with:

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

Just need to add x number of days to it

Naveed
  • 41,517
  • 32
  • 98
  • 131

11 Answers11

133

php supports c style date functions. You can add or substract date-periods with English-language style phrases via the strtotime function. examples...

$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'));

or

<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;
}
?>

John
  • 1
  • 13
  • 98
  • 177
  • 1
    using the strtotime() function is very expensive and would be massive overkill if you just want to add a couple of days. – nickf Nov 10 '08 at 07:37
  • 11
    Sounds like premature optimization. If it's not in a time-critical piece of code, and we have no reason to think it is, burning a few milliseconds is nothing compared to the cost of programmer time. – Andy Lester Jul 30 '09 at 16:17
25

a day is 86400 seconds.

$tomorrow = date('y:m:d', time() + 86400);
nickf
  • 537,072
  • 198
  • 649
  • 721
  • 1
    Although, for readability reasons you shoudn't use the Integer everywhere as-is. define a const somewhere or use 60 * 60 * 24 so its clear what the number represents. – Kent Fredric Nov 10 '08 at 08:07
  • i use 86400 so often that it's as obvious to me now as it is that there's 60 seconds in a minute :). If I am doing a lot of time functions, then yes, I'll often declare it a constant. – nickf Nov 10 '08 at 14:03
  • 1
    @nickf this is okay when you're the only one maintaining your code, but usually there are other people viewing it as well. If not now then maybe in future there will... – Philipp Apr 24 '15 at 14:38
19

The simplest way to add x no. of days..

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

OR from specified date...

echo date('Y-m-d',strtotime('+1 day', strtotime('2007-02-28')));
John
  • 1
  • 13
  • 98
  • 177
Biswadeep Sarkar
  • 841
  • 9
  • 17
8

With 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;

will output

2012-12-24

2012-12-25

2012-12-26

Xavier John
  • 8,474
  • 3
  • 37
  • 51
7

The date_add() function should do what you want. In addition, check out the docs (unofficial, but the official ones are a bit sparse) for the DateTime object, it's much nicer to work with than the procedural functions in PHP.

eplawless
  • 4,225
  • 7
  • 34
  • 35
2

If you need this code in several places then I'd suggest that you add a short function to keep your code simpler and easier to test.

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;
}

Then you can use it anywhere like this:

$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 );
Philipp
  • 10,240
  • 8
  • 59
  • 71
2
$NewDate=Date('Y-m-d', strtotime('+365 days'));

echo $NewDate; //2020-05-21

Kaushik shrimali
  • 1,178
  • 8
  • 15
0

Add 15 day to a select element (using "Alive to Die" suggestion)

<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;
}
?>

Rayed
  • 55
  • 9
0

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

From mktime documentation:

mktime() is useful for doing date arithmetic and validation, as it will automatically calculate the correct value for out-of-range input.

The advantage of this method is that you can add or subtract any time interval (hours, minutes, seconds, days, months, or years) in an easy to read line of code.

Beware there is a tradeoff in performance, as this code is about 2.5x slower than strtotime("+1 day") due to all the calls to the date() function. Consider re-using those values if you are in a loop.

humbads
  • 3,252
  • 1
  • 27
  • 22
0

You can also use Object Oriented Programming (OOP) instead of procedural programming:

$fiveDays = new DateInterval('P5D');
$today = new DateTime();
$fiveDaysAgo = $today->sub(fiveDays); // or ->add(fiveDays); to add 5 days

Or with just one line of code:

$fiveDaysAgo = (new DateTime())->sub(new DateInterval('P5D'));
pjehan
  • 820
  • 10
  • 18
-2
<?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>
Manoj Sharma
  • 1,467
  • 2
  • 13
  • 20