Domanda

is there a way in PHP to get the next date(s) using a 4-week interval from a given date ?

Example:

My start date is Friday, Jan 03, 2014 and my interval is every 4 weeks from that date. What I am looking for is the next date (or dates, if possible) from the current date that matches this 4-week interval. In the above example this would be Friday, May 23, 2014 (then June 20, 2014, July 18, 2014 etc.).

I know I can get the current date as follows: $today = date('Y-m-d');

and I could probably set the start date like this: $start = date('2014-01-03');

but I don't know how to calculate the interval and how to find out the next matching date(s).

È stato utile?

Soluzione

You should read up on the DateTime classes, specifically DatePeriod and DateInterval:

$start = new DateTime('2014-01-03');
$interval = DateInterval::createFromDateString('4 weeks');
$end = new DateTime('2015-12-31');

$occurrences = new DatePeriod($start, $interval, $end);

foreach ($occurrences as $occurrence) {
    echo $occurrence->format('Y-m-d') . PHP_EOL;
}

DatePeriod takes a start date and a DateInterval and allows you traverse over the object to get all dates within the boundaries using the given interval. The cut off can be either a set number of cycles (so the next 10 dates) or an end date (like above), even if the end date is not one of the dates the interval falls on (it will stop below it). Or you can use an 8601 interval notation string (which sounds so much fun, huh?), but I'm pretty shaky on that.

Altri suggerimenti

If 4-week interval means 7 x 4 = 28 days, you can obtain the "next date" by:

$today = new DateTime();
$next_date = $today->add(new DateInterval('P28D'));
$next_next_date = $next_date->add(new DateInterval('P28D'));
$next_next_next_date = $next_next_date->add(new DateInterval('P28D'));

And if you want to calculate more "next dates", you can repeat the add() to repetitively add 28 days to your date.

Note: Beside using P28D, you can use P4W, which means 4 weeks.


While some answers may suggest using strtotime(), I find the object-oriented approach more structured. However, DateInterval is only available after PHP >= 5.3.0 (while DateTime is available after PHP >= 5.2.0)

You could use strtotime()

echo date('Y-m-d', strtotime('now +4 weeks'));

UPDATED:

$start = date('Y-m-d', strtotime('2014-01-03 +4 weeks'));
echo $start;

You could also run this in a for loop to get the next 6 or more dates. For example:

$Date = "2014-01-03";
$Int = 6;
for($i=0; $i<$Int; $i++){
    $Date = date('Y-m-d', strtotime('{$Date} +4 weeks'));
    echo $Date;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top