2017-04-17 5 views
0

Ich habe eine Tabelle in MySQL mit einem Datumsfeld (NDate genannt), das Standard-Datumswerte enthält ("2017-04-17", "2017-04-18", usw.).Tage in PHP erhöhen MySQL-Datum

Durch PHP-Webseite versuche ich, das Systemdatum (sagen heute ist 2017-04-17), und ziehen Sie dann alle Zeilen aus der obigen Tabelle, wo NDate = "2017-04-17". Keine Probleme bis hierher.

Ich habe eine Anforderung, den Tag zu erhöhen (beginnend heute und für die nächsten 10 Tage - dh 2017-04-17 bis 2017-04-26), und für jeden Tag Bericht Einträge unter einer anderen Überschrift wie "Einträge für 2017-04-17 "die alle Zeilen mit NDate 2017-04-17," Einträge für 2017-04-18 "auflistet, die alle Zeilen mit NDate 2017-04-18 auflisten.

Ich habe versucht, eine for-Schleife mit PHP date_modify Funktion zu verwenden, um die Tage einzeln zu inkrementieren, aber es zeigt keine Ergebnisse.
Hier sind die ausgewählten Teile des Codes:

date_default_timezone_set('US/Eastern'); 
$datev = date("Y-m-d"); 
for ($x = 0; $x <= 10; $x++) 
{ 
    $datev=date_modify($date,"+$x days"); 
    echo "before date format<br>";  // echo statement 1 
    echo "date is: $datev <br>";  // echo statement 2 
    $sql = "SELECT * FROM tablename where Ndate='$datev'"; 
    echo "before result<br>";   // echo statement 3 
    ... 
    ... 
    ... 
} 

Ausgabe auf der Webseite zeigt nur Anweisung 1. Aber Echo Statistik 2 und 3 werden nicht gedruckt.

Antwort

0

Sie Tage erhöhen kann strtotime Funktion als Parameter Datumsfunktion verwenden.

Für 10 Tage können Sie for-Schleife verwenden, um ein Array von Tagen zu erstellen. Dann iteriere darüber, um die benötigten Abfragen auszuführen.

$today = date('Y-m-d'); 
$dates=array($today); 
for($i=1;$i<10;$i++) { 
    $NewDate=date('Y-m-d', strtotime("+".$i." days")); 
    $dates[]=$NewDate; 
} 

foreach($dates as $dt) { 
    // sql stuff here 
    echo "date is: $dt <br>"; 
    $sql = "SELECT * FROM tablename where Ndate='$dt'"; 
    echo "before result<br>"; 
    // ..... 
} 

Dieser Code sollte für Ihren Fall funktionieren. Wenn irgendwelche Probleme, lass es mich wissen.

+0

Während dieser Code die Frage beantworten kann, einen zusätzlichen Kontext betreffend, warum und/oder wie dieser Code die Frage beantwortet, verbessert seinen langfristigen Wert. Eine *** gute Antwort *** wird immer habe eine Erklärung, was getan wurde und warum es wurde so gemacht, nicht nur für das OP, sondern auch für zukünftige Besucher von SO. –

+0

@JayBlanchard Sie haben wieder Recht Ich habe Informationen für das Codebeispiel hinzugefügt –

+0

Sollte ich Ihre anderen Antworten überprüfen? Oder nimmst du dir die Zeit zurück zu gehen und notwendige Informationen/Erklärungen hinzuzufügen? –

0

Try this:

$start = strtotime(date('Y-m-d')); 
$end = strtotime(date('Y-m-d', strtotime('+10 days'))); 
while($start <= $end) 
{ 
    $date = date('Y-m-d', $start); 
    //use $date to do stuff 
    //SELECT * FROM tablename where Ndate='$date' 
    $start = strtotime("+1 day", $start); 
} 
+0

Hallo @gaganshera, Danke für die schnelle Antwort. Kannst du auch etwas über die genaue SQL-Anweisung herausfinden: "$ sql =" SELECT * FROM Tabellenname, wobei Ndate = '$ start ";" gibt keine Ergebnisse zurück ... Echo $ start (wenn sein Wert ist "2017-04-17" veröffentlicht einen Wert von "1492412400" – user6337701

+0

Tun oder nicht. Es gibt keine "versuchen". Eine *** gute Antwort *** wird immer eine Erklärung haben, was getan wurde und warum es so gemacht wurde, nicht nur für das OP, sondern auch für zukünftige Besucher von SO. –

+0

@ user6337701 1492412400 ist der [unix timestamp] (https: // en .wikipedia.org/wiki/Unix_time) und stellt das Datum in numerischer Form dar. Überprüfen Sie bitte auch meinen Kommentar in der Antwort auf die Frage – gaganshera