64

I have date of this format March 3, 2011 in database and I need to extend it with 7 days. I mean

 $date = $date + 7
. Is there any build in function to do that ?
Michael
  • 6,279
  • 14
  • 56
  • 91
  • 2
    possible duplicate of [Add number of days to a date](http://stackoverflow.com/questions/2332681/add-number-of-days-to-a-date) – Gordon Mar 02 '11 at 23:27
  • What format is the date type in your DB? Your best bet will be to pull the data out and run it through your own function, increment the additional days to the string and then pop it back into the DB. – a.stgeorge Mar 02 '11 at 23:27
  • and many more in http://stackoverflow.com/search?q=add+7+days+date+php – Gordon Mar 02 '11 at 23:28

7 Answers7

152
$date = "Mar 03, 2011";
$date = strtotime($date);
$date = strtotime("+7 day", $date);
echo date('M d, Y', $date);
Matthew Scharley
  • 121,977
  • 51
  • 194
  • 218
  • 1
    is there also anyway to compare the final form with the today date ? (e.g if ($date < current date) {echo ' the date is in the past' }? – Michael Mar 02 '11 at 23:59
  • @Michael the result of strtotime is an integer. This integer represents the number of seconds since the UNIX epoch (Jan 1 1970 00:00:00). These integers can be compared using the exact code you just used. – Matthew Scharley Mar 03 '11 at 00:23
  • @Michael the `time()` function can be used to get the current date/time as a UNIX timestamp for comparison. – Matthew Scharley Mar 03 '11 at 00:40
  • yeah you're right .. anyway I used strtotime("now") instead of time() – Michael Mar 03 '11 at 01:05
23

The "+1 month" issue with strtotime

As noted in several blogs, strtotime() solves the "+1 month" ("next month") issue on days that do not exist in the subsequent month differently than other implementations like for example MySQL.

$dt = date("Y-m-d");
echo date( "Y-m-d", strtotime( "$dt +1 day" ) ); // PHP:  2009-03-04
echo date( "Y-m-d", strtotime( "2009-01-31 +2 month" ) ); // PHP:  2009-03-31
Kenshi Mokak
  • 243
  • 2
  • 5
22

echo date('d/m/Y', strtotime('+7 days'));

IlludiumPu36
  • 4,058
  • 9
  • 56
  • 97
20

Another more recent and object style way to do it :

$date = new DateTime('now');
$date->add(new DateInterval('P7D'));

php doc of datetime add

Nicolas
  • 551
  • 6
  • 13
5

yes

$oneweekfromnow = strtotime("+1 week", strtotime("<date-from-db>"));

on another note, why do you have your date in the database like that?

Jan Dragsbaek
  • 7,906
  • 2
  • 24
  • 45
0
onClose: function(selectedDate) {

    $("#dpTodate").datepicker("option", "minDate", selectedDate);
    var maxDate = new Date(selectedDate);

     maxDate.setDate(maxDate.getDate() + 6); //6 days extra in from date

     $("#dpTodate").datepicker("option", "maxDate", maxDate);
}
RBT
  • 21,293
  • 19
  • 144
  • 210
  • **From review queue**: May I request you to please add some context around your source-code. Code-only answers are difficult to understand. It will help the asker and future readers both if you can add more information in your post. – RBT May 20 '19 at 12:13
0

I would solve this like that. First, I'd create an instance of your given datetime object. Then, I'd create another datetime object which is 7 days later than the initial one. And finally, I'd format it the way you like.

With meringue library, this is quite intuitive and elegant. Here's the code:

(new Future(
    new FromCustomFormat('F j, Y', 'March 3, 2011'),
    new NDays(7)
))
    ->value();

The result is a string in ISO8601 format. If you like, you can format it anyway you like using the same ISO8601 syntax:

(new ISO8601Formatted(
    new Future(
        new FromCustomFormat('F j, Y', 'March 3, 2011'),
        new NDays(7)
    ),
    'F j, Y'
))
    ->value();

The code above uses meringue library. Here's a quick start, you can take a look if you want.

Vadim Samokhin
  • 3,274
  • 4
  • 39
  • 66