2

Here's my code:

$d = new DateTime('2016-07-14');
$inc = new DateInterval('P1D');
$dateOptions = '';
//1=monday 2=tuesday 3=wednesday
$required = array(1,2,3,4);
$counter = $week = 0;
for ($i=0; $i<40; ++$i){
    $d = $d->add($inc);
    if (in_array($d->format('w'), $required)) {
        if($counter % 4 == 0){
            echo ($week + 1) . "<br />";
            ++$week;
        }
        $t = $d->format('l, F d, Y');
        echo $t . "<br />";   
        ++$counter;
    }
}

Here's the output:

1
Monday, July 18, 2016
Tuesday, July 19, 2016
Wednesday, July 20, 2016
Thursday, July 21, 2016
2
Monday, July 25, 2016
Tuesday, July 26, 2016
Wednesday, July 27, 2016
Thursday, July 28, 2016

The output I would like looks like this:

1
Thursday, July 14, 2016
2
Monday, July 18, 2016
Tuesday, July 19, 2016
Wednesday, July 20, 2016
Thursday, July 21, 2016
3
Monday, July 25, 2016
Tuesday, July 26, 2016
Wednesday, July 27, 2016
Thursday, July 28, 2016

What changes to the code needs to be made to allow Thursday to output in the first week?

Thanks in advance!

Thamilhan
  • 13,040
  • 5
  • 37
  • 59
Tim M
  • 306
  • 3
  • 18
  • take help from [php-datetime-class-change-first-day-of-the-week-to-monday](http://stackoverflow.com/questions/13128854/php-datetime-class-change-first-day-of-the-week-to-monday) – Murad Hasan May 12 '16 at 06:23

3 Answers3

1
  1. You are incrementing the counter which gets initialized from 0. So change to week number
  2. You are asking to start from given date, but incrementing it inside the loop. So subtract it before the loop

So your modified code:

<?php
$d = new DateTime('2016-07-14');
$inc = new DateInterval('P1D');

$d = $d->sub($inc); // You need the start date from 14

$required = array(1,2,3,4);
$week = 0;
for ($i=0; $i<40; ++$i){
    $d = $d->add($inc);
    $weekNumber = $d->format('w');
    if (in_array($weekNumber, $required)) {
        if(!($weekNumber-1) % 4){   //Don't calculate the counter, but the week number
            echo (++$week) . "<br />";
        }
        $t = $d->format('l, F d, Y');
        echo $t . "<br />";   
    }
}

Output:

Thursday, July 14, 2016
1
Monday, July 18, 2016
Tuesday, July 19, 2016
Wednesday, July 20, 2016
Thursday, July 21, 2016
2
Monday, July 25, 2016
Tuesday, July 26, 2016
Wednesday, July 27, 2016
Thursday, July 28, 2016
3
Monday, August 01, 2016
Tuesday, August 02, 2016
Wednesday, August 03, 2016
Thursday, August 04, 2016
4
Monday, August 08, 2016
Tuesday, August 09, 2016
Wednesday, August 10, 2016
Thursday, August 11, 2016
5
Monday, August 15, 2016
Tuesday, August 16, 2016
Wednesday, August 17, 2016
Thursday, August 18, 2016
6
Monday, August 22, 2016

Your Eval

Thamilhan
  • 13,040
  • 5
  • 37
  • 59
0

Use below code,

for ($i=0; $i<40; ++$i){
    if($i==0)
    {
        echo ($week + 1) . "<br />";
            ++$week;
    $t = $d->format('l, F d, Y');
        echo $t . "<br />";  

    }
    $d = $d->add($inc);
    if (in_array($d->format('w'), $required)) {
        if($counter % 4 == 0){
            echo ($week + 1) . "<br />";
            ++$week;
        }
        $t = $d->format('l, F d, Y');
        echo $t . "<br />";   
        ++$counter;
    }
}

Output:

1
Thursday, July 14, 2016
2
Monday, July 18, 2016
Tuesday, July 19, 2016
Wednesday, July 20, 2016
Thursday, July 21, 2016
3
Monday, July 25, 2016
Tuesday, July 26, 2016
Wednesday, July 27, 2016
Thursday, July 28, 2016
Brijal Savaliya
  • 1,101
  • 9
  • 19
0

Here's the final code I used:

$d = new DateTime('2016-08-29');
$inc = new DateInterval('P1D');

$d = $d->sub($inc); 

$required = array(2,4); //1=monday 2=tuesday 3=wednesday 4=thursday 5=friday
$howmany = count($required);

$week = 0;

for ($i=0; $i<120; ++$i){

    $d = $d->add($inc);
    if (in_array($d->format('w'), $required)) {
        if($counter % $howmany == 0){
            echo ($week + 1) . "<br />";
            ++$week;
        }

    $t = $d->format('l, F d, Y');
        echo $t . "<br />";   
        ++$counter;
    }
}

Thanks for the help!

Tim M
  • 306
  • 3
  • 18