2016-05-12 9 views
2

Hier ist mein Code:generieren Termine in PHP

$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; 
    } 
} 

Hier ist der Ausgang:

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 

Der Ausgang I wie folgt aussieht möchte:

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 

Was ist mit dem Code ändert muss gemacht werden, damit der Donnerstag in der ersten Woche ausgibt?

Vielen Dank im Voraus!

+0

Hilfe von [php-datetime-class-change-zuerst-Tag-der-Woche-zu-Montag] (http://stackoverflow.com/questions/13128854/php-datetime-class-change-) erster-Tag-der-Woche-bis-Montag) –

Antwort

0

Verwenden Sie den folgenden 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; 
    } 
} 

Ausgang:

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 
+0

Warum sollte OP "diesen Code verwenden"? Was hast du geändert und warum? – Rizier123

+0

hat er getan, "$ inc = new DateInterval ('P1D');" das erhöht sich um einen Tag, wenn er also das aktuelle Datum abrufen möchte, kann er es auch über den Code bekommen, ändert sich logischerweise in seinen Code @ Rizier123 –

+0

Danke für die Hilfe! –

1
  1. Sie Erhöhung des Zählers, der von 0 initialisiert wird also zu Wochennummer ändern
  2. Sie fragen Beginnen Sie mit dem angegebenen Datum, erhöhen Sie es jedoch innerhalb der Schleife. So subtrahieren sie vor der Schleife

So Ihre modifizierten 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 />"; 
    } 
} 

Ausgang:

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 

Ihre

+0

Ausgezeichnet! Vielen Dank! –

+0

@TimM Willkommen. Vergiss nicht zu akzeptieren, wenn es deine Frage beantwortet hat – Thamilan

0

Hier ist der endgültige Code, den ich verwendet:

$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; 
    } 
} 

Danke für die Hilfe!