Ing. Michal Hudak
Ing. Michal Hudak

Reputation: 5612

How to get every specific days of week within given date range in PHP?

This give me every monday date in date range.

Question: How to get every monday and friday of week?

$start_date = date('Y-m-d');
$end_date = date('Y-m-d', strtotime($start_date . ' + 1 MONTH'));

for(
    $i = strtotime('Monday', strtotime($start_date)); 
    $i <= strtotime($end_date); 
    $i = strtotime('+1 WEEK', $i)
) {
    echo date('Y-m-d', $i). '<br>';
}

My Update:

$my_dates = [];
for(
    $i = strtotime($start_date); 
    $i <= strtotime($end_date); 
    $i = strtotime('+1 DAY', $i)
) {
    if(in_array(date('N', $i), array(1, 5))) {
        $my_dates[] = date('Y-m-d', $i);
    }
}

var_dump($my_dates);

Upvotes: 3

Views: 1411

Answers (2)

Narendrasingh Sisodia
Narendrasingh Sisodia

Reputation: 21422

If I'm not wrong than you can simply use for loop like as

$start = "2015-09-01";
$end = date('Y-m-d',  strtotime("$start +1 months"));
$period = floor((strtotime($end) - strtotime($start))/(24*60*60));

for($i = 0; $i < $period; $i++){
    if(in_array(date('l',strtotime("$start +$i day")),["Monday","Friday"]))
        echo date('l d M, Y',strtotime("$start +$i day"))."\n";
}

Output:

Friday 04 Sep, 2015
Monday 07 Sep, 2015
Friday 11 Sep, 2015
Monday 14 Sep, 2015
Friday 18 Sep, 2015
Monday 21 Sep, 2015
Friday 25 Sep, 2015
Monday 28 Sep, 2015

Demo

Upvotes: 0

LihO
LihO

Reputation: 42093

Have a look at library called When, it's "Date / Calendar recursion library for PHP 5.3+".

Let's say MF schedule for next month:

$now = new DateTime('NOW');
$till = clone $now;
$till->modify('+1 month');

$r = new When();
$r->startDate($now)
  ->freq("weekly")
  ->until($till)
  ->byday(array('MO', 'FR'))
  ->generateOccurrences();

$occurrences = $r->occurrences;

Upvotes: 1

Related Questions