john tully
john tully

Reputation: 309

Get Mondays of every second month

I am trying to get the date of every monday skipping a month each time but I keep getting only the monday of the first week. This is my code:

$begin = new \DateTime("2017-04-01");
$end = new \DateTime("2017-08-31");

$interval = \DateInterval::createFromDateString("next monday of +2 months");
$period = new \DatePeriod($begin, $interval, $end);
foreach ( $period as $dt )
            {
// echo the date for each monday found in the second month
}

Any help would be greatly appreciated.

Upvotes: 0

Views: 251

Answers (1)

OptimusCrime
OptimusCrime

Reputation: 14863

You seem to have mixed the $begin and $end values. Also, the DateInterval will only have one Monday every single month. I was not able to find a interval expression to get every Monday in every other month, so I did the filtering manually. In this example we use the month from the begin date, and includes the Mondays from that date, skip two months and so on.

<?php
$end = new \DateTime("2017-04-01");
$begin = new \DateTime("2007-08-31");
$month_even = ((int) $begin->format('m')) % 2 === 0;

$interval = \DateInterval::createFromDateString("next monday");
$period = new \DatePeriod($begin, $interval, $end);
foreach ($period as $dt) {
    // Check if we want to show even months, make sure that the current month is even
    // or, if we want to show odd months, the month should be odd.
    if ((((int) $dt->format('m')) % 2 === 0) === $month_even) {
        echo $dt->format('d-m-Y') . PHP_EOL;
    }
}

Outputs:

31-08-2007
01-10-2007
[...]
06-02-2017
13-02-2017
20-02-2017
27-02-2017

Upvotes: 1

Related Questions