Zdobycie wszystkich dat na poniedziałki i wtorki na następny rok

Muszę wydrukować listę dat (tylko poniedziałki i wtorki) na następne 12 miesięcy od bieżącej daty, tak jak poniżej:

Styczeń 2010
Wt 12 stycznia 2010 r
Pon. 18 stycznia 2010 r
19 stycznia 2010 r
Pn 25 stycznia 2010 r
Luty 2010
Wt 02.02.2010
Pon 08 Lut 2010
Wto 09 lutego 2010
Pn 15 lutego 2010
Wt 16 lutego 2010
Pon 22 lutego 2010
Mar 2010
Wto 09 marca 2010
15 marca 2010 r
Wt 16 marca 2010
...

Uznałem, że jestem nowym użytkownikiem PHPstrtotime a zapętlenie w ciągu najbliższych 52 tygodni to najlepszy sposób.

$blockedDatesInput = "08 Mar 2010,12 Apr 2010"; // dont show these dates
$blockedDates = explode ("," , $blockedDatesInput); // convert to array
$currentMonth = ""; // current month marker

// loop over the next 52 weeks to find Mondays and Tuesdays
for($i=0; $i<=52; $i++){
// build the month header
$monthReference = date("M Y", strtotime('+'.$i.' Week'));

// check if date exists in $blockeddate
if (!in_array(date("d M Y", strtotime('+'.$i.' Monday')), $blockedDates) || 
    !in_array(date("d M Y", strtotime('+'.$i.' Tuesday')), $blockedDates) ) {
     // check if we have to show a new month
     if(strcmp($monthReference, $currentMonth) <> 0){
       echo $monthReference.'<br />',"\n";
     }else{
      // output the dates
      echo date("D d M Y", strtotime('+'.$i.' Monday')).'<br />',"\n";
      echo date("D d M Y", strtotime('+'.$i.' Tuesday')).'<br />',"\n";
     }
       $currentMonth = date("M Y", strtotime('+'.$i.' Week'));
   }
}

Jednak wyjście z mojego kodu to

Styczeń 2010
Pon. 18 stycznia 2010 r
Wt 12 stycznia 2010 r
Pn 25 stycznia 2010 r
19 stycznia 2010 r
Luty 2010
Pon 08 Lut 2010
Wt 02.02.2010
Pn 15 lutego 2010
Wto 09 lutego 2010
Pon 22 lutego 2010
Wt 16 lutego 2010
Mar 2010
Pon 08 Mar 2010
Tue 02 Mar 2010
15 marca 2010 r
Wto 09 marca 2010
Pon 22 marca 2010
Wt 16 marca 2010
Pn 29 marca 2010
23 marca 2010 r

Jak widzisz, daty nie są w odpowiedniej kolejności, a ja jestem w sytuacji, w której popełniam błąd.

Czy istnieje bardziej elegancki / prosty sposób rozwiązania tego problemu?

Wersja PHP używana to 5.2.11 i nie ma szans na przejście do 5.3 w najbliższym czasie :-(

Dzięki za pomoc.

Kod poniżej modyfikacji zgodnie z sugestią Aly. Zmieniono datę komputera z Tue, 12/01/2010 na Wed, 13/01/2010, aby przetestować dane wyjściowe.

$blockedDatesInput = "08 Mar 2010,12 Apr 2010"; // dont show these dates
$blockedDates = explode ("," , $blockedDatesInput); // convert to array
$currentMonth = ""; // current month marker

// loop over the next 52 weeks to find Mondays and Tuesdays
for($i=0; $i<=52; $i++){
// build the month header
$monthReference = date("M Y", strtotime('+'.$i.' Week'));

// check if date exists in $blockeddate
if (!in_array(date("d M Y", strtotime('+'.$i.' Monday')), $blockedDates) || 
    !in_array(date("d M Y", strtotime('+'.$i.' Tuesday')), $blockedDates) ) {
     // check if we have to show a new month
     if(strcmp($monthReference, $currentMonth) <> 0){
       echo $monthReference.'<br />',"\n";
     }else{
      // output the dates (changed the order as suggested by Aly)
      echo date("D d M Y", strtotime('+'.$i.' Tuesday')).'<br />',"\n";
      echo date("D d M Y", strtotime('+'.$i.' Monday')).'<br />',"\n";          
     }
       $currentMonth = date("M Y", strtotime('+'.$i.' Week'));
   }
}

Wydaj ponownie w złej kolejności.

Styczeń 2010
19 stycznia 2010 r
Pon. 18 stycznia 2010 r
26 stycznia 2010 r
Pn 25 stycznia 2010 r
Luty 2010
Wto 09 lutego 2010
Pon 08 Lut 2010
Wt 16 lutego 2010
Pn 15 lutego 2010
Wt 23 lutego 2010
Pon 22 lutego 2010

questionAnswers(4)

yourAnswerToTheQuestion