2016-06-29 12 views
0

in Antwort RESOLVED unter

Erstellen ein Planungstool für meine Nutzer und ich habe ein Problem versucht, meine Variable aus einer Drop-Down-Auswahl erhalten zu erhöhen:

$date_select = $_POST['date_select']; 

Ich bin sicher, es ist ein Lehrbuch zu beheben, aber um es einfach zu sagen ... Ich muss $ date_select um +1 Woche für 52 Wochen erhöhen.

Ich habe ein Dropdown-Menü beginnend mit dem aktuellen Datum und Schleife bis zum Ende von 365 Tagen, Erhöhung um 1. Kein Problem hier.

<select name="date_select" form="create_schedule"> 
<?php 
for($i = 0; $i <= 365; $i++){ 
$d=strtotime($i . " Day"); 
$day = date("n-j-y l", $d) . "<br>"; 
echo "<option>" . $day . "</option>"; 
} 
?> 
</select> 

Diese Auswahl dargestellt wird durch:

$date_select = $_POST['date_select']; 

daneben, vor dem Einreichen können Benutzer ein Optionsfeld wählen - entweder M, T, W, Th, F, Sa, oder Sun zu geben Sie an, ob sie ihre Anfrage an diesem ausgewählten Tag für jede Woche für den Rest des Jahres anwenden möchten. (Das ist, was ich versuche zu tun ... das ist: Erhöhung $ date_select um „+1 Woche“, bis die for-Schleife beendet ist)

Diese Auswahl wird vertreten durch:

$repeat = $_POST['repeat']; 

Diese ist der nächste, den ich bekommen habe ... der Code unterschritten für jeden "Montag" wie ich zum Beispiel möchte ... wenn $ repeat == 'M', aber die numerischen Daten sind falsch ...

if(isset($_POST['repeat'])){ 
     for($i = 0; $i <= 52; $i++){ 
      $date = strtotime($i . " week", strtotime($date_select)); 
      echo date("n-j-y l", $date) . "<br/>"; 
      } 

Beispiel: Wenn das ausgewählte Datum 7-4-16 Montag ist, lautet die Ausgabe:

11-26-07 Montag

12-3-07 Montag

12-10-07 Montag

12-17-07 Montag

12-24-07 Montag

12-31-07 montag

1-7-08 montag

Und so weiter ...

Vielen Dank im Voraus.

+0

Ihre ''

Antwort

1

das Problem behoben empfehlen war in Das Datumsformat ... "mdY" ist nicht äquivalent zu "m/d/Y", wenn die Anzahl der Tage oder Wochen in Bezug auf die Ausgabe erhöht wird. Irgendwann wurden "amerikanische" Datumsformatwerte und "europäische" Datumsformatwerte durcheinander gebracht. Ich habe das Datumsformat innerhalb der beiden For-Schleifen geändert und es funktioniert.

"Hinweis: Achten Sie auf Datumsangaben in den Formaten m/d/y oder dmy; wenn das Trennzeichen ein Schrägstrich (/) ist, wird das amerikanische m/d/y angenommen. Wenn das Trennzeichen ein Strich ist (-) oder ein Punkt (.), dann wird das europäische dmy-Format angenommen. Um mögliche Fehler zu vermeiden, sollten Sie möglichst JJJJ-MM-DD-Daten oder date_create_from_format() verwenden. "

http://www.w3schools.com/php/func_date_strtotime.asp

Hier ist die Arbeitslösung, falls jemand versucht, etwas ähnliches

<select name="date_select" form="create_schedule"> 
<?php 
for($i = 0; $i <= 365; $i++){ 
$d=strtotime($i . " Day"); 
$day = date("m/d/Y l", $d) . "<br>"; 
echo "<option>" . $day . "</option>"; 
} 
?> 
</select> 

if(isset($_POST['repeat'])){ 
    $repeat = $_POST['repeat']; 
    echo "<br/>"; 
     for($i = 0; $i <= 13; $i++){   
      $d=strtotime($i . " week", strtotime($date_select)); 
      echo date("m/d/Y l", $d) . "<br/>"; 
      } 
} 
0

Also auf PHP haben Sie Klassen, die wirklich werden kann hilfreich dabei, dass

\DateTime und \DateInterval

So zu tun, was Sie wollen, würde ich

$firstDate = \DateTime::createFromFormat('Y-m-d', $date_select)); 
$baseDate = clone $firstDate; 
$intervalToAdd = new \DateInterval('P1w') 
if(isset($_POST['repeat'])){ 
     for($i = 0; $i <= 52; $i++){ 
      $date [$i] = $baseDate->add($intervalToAdd); 
      echo '<option>'.$date[$i]->format('Y-m-d').'</option>'; 
      } 
+0

Danke, aber nicht den Trick. – Shane

+0

Können Sie die Ausgabe gimme? –

+0

Ich habe es herausgefunden - ich habe die Lösung in meinen ursprünglichen Beitrag eingefügt. – Shane