Ophogen datum in while-lus
Ik wil graag de datums binnen een tijdvak gebruiken om data in te voegen in een tabel. Daarvoor wil ik de datum binnen een lus iedere keer een dag ophogen tot de einddatum is bereikt. Dit lukt echter niet. Als het al werkt worden de criteria van de lus iet gehanteerd waardoor hij door blijft draaien of het werkt helemaal niet. De bedoeling is dat het script alle dagen laat zien binnen het aangegeven tijdvak. Het onderstaande heb ik gemaakt. Iemand enig idee waar het mis gaat.
Bedankt
Andy
Gewijzigd op 05/07/2020 12:57:58 door Andy Kort
Zou je jouw code even tussen code-tags willen plaatsen?
Toevoeging op 05/07/2020 13:03:37:
Andy Kort op 05/07/2020 13:00:02:
Jazeker, maar hoe kan ik dit plaatsen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
if(isset($_POST['verzend'])) {
echo $_POST['date']."<br>";
echo $_POST['enddate']."<br><br>";
echo "De oude datum is ".$_POST['date']."<br>";
echo "De einddatum is ".$_POST['enddate']."<br>";
$date=date_create($_POST['date']);
echo date_format($date,"Y/m/d");
$date=date_format($date,"Y/m/d");
echo "datum: ".$date."<br>";
$enddate=$_POST['enddate'];
echo "Einddatum: ".$enddate;
while ($date<=$endddate) {
$date=date_modify($date, '+1 day');
date_format($date, 'Y-m-d');
$date=date_format($date, 'Y-m-d');
echo "<br><br>De nieuwe datum is ".$date;
}
}
?>
if(isset($_POST['verzend'])) {
echo $_POST['date']."<br>";
echo $_POST['enddate']."<br><br>";
echo "De oude datum is ".$_POST['date']."<br>";
echo "De einddatum is ".$_POST['enddate']."<br>";
$date=date_create($_POST['date']);
echo date_format($date,"Y/m/d");
$date=date_format($date,"Y/m/d");
echo "datum: ".$date."<br>";
$enddate=$_POST['enddate'];
echo "Einddatum: ".$enddate;
while ($date<=$endddate) {
$date=date_modify($date, '+1 day');
date_format($date, 'Y-m-d');
$date=date_format($date, 'Y-m-d');
echo "<br><br>De nieuwe datum is ".$date;
}
}
?>
<form id="form2" action="" method="post">
<input type="date" name="date" value="">
<br><br>
<input type="date" name="enddate" value="">
<br><br>
<input type="submit" class="btn btn-primary" style="background-color:#993366;" value="verzend" name="verzend"> <input type="reset" class="btn btn-primary" style="background-color:#993366;" value="reset">
</form>
</html>
Gewijzigd op 05/07/2020 13:09:46 door Andy Kort
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
if( isset( $_POST['verzend'] ) )
{
echo '<pre>' . print_r( $_POST, TRUE ) . '</pre>';
$begin_date = new DateTime( $_POST['date'] );
$end_date = new DateTime( $_POST['enddate'] );
echo '<p>Begindatum : ' . $begin_date->format('Y-m-d') . '<br />';
echo 'Einddatum : ' . $end_date->format('Y-m-d') . '</p>';
$begin_date->modify('+1 day');
while ( $begin_date < $end_date )
{
echo "De nieuwe datum is : " . $begin_date->format('Y-m-d') . '<br />';
$begin_date->modify('+1 day');
}
}
?>
<form id="form2" method="post">
<input type="date" name="date" value=""><br />
<input type="date" name="enddate" value=""><br />
<input type="submit" value="verzend" name="verzend">
</form>
if( isset( $_POST['verzend'] ) )
{
echo '<pre>' . print_r( $_POST, TRUE ) . '</pre>';
$begin_date = new DateTime( $_POST['date'] );
$end_date = new DateTime( $_POST['enddate'] );
echo '<p>Begindatum : ' . $begin_date->format('Y-m-d') . '<br />';
echo 'Einddatum : ' . $end_date->format('Y-m-d') . '</p>';
$begin_date->modify('+1 day');
while ( $begin_date < $end_date )
{
echo "De nieuwe datum is : " . $begin_date->format('Y-m-d') . '<br />';
$begin_date->modify('+1 day');
}
}
?>
<form id="form2" method="post">
<input type="date" name="date" value=""><br />
<input type="date" name="enddate" value=""><br />
<input type="submit" value="verzend" name="verzend">
</form>
Gewijzigd op 05/07/2020 13:26:27 door - Ariën -
Dank je wel. Dit doet het wel. Mvg
De vermoedelijke reden dat je while-loop op hol slaat is dat je $date niet op dezelfde wijze formatteert als $enddate (Y/m/d versus... een onbekende formattering), maar mogelijk ook omdat je in de loop $date ineens een andere formattering krijgt (initieel Y/m/d versus Y-m-d in de loop). Dit (ontwerp) klinkt al niet zo nauwgezet.
Je had in zekere zin al kunnen zien dat dit mis zou gaan, je geeft zowel de begin- als einddatum weer nog voordat je de loop start. Hierbij moet je snappen dat de vergelijking die in de while-conditie wordt gedaan een tekstuele vergelijking is. Er gelden dan andere regels dan bij een numerieke vergelijking. Vooral als je hierbij dan (nota bene verschillende!) karakters invoegt, dan is het niet zo verwonderlijk dat de code niet doet wat jij wilt.
Afhankelijk van het invulformulier zul je misschien ook nog wat randgevallen af moeten vangen. Wat als de einddatum voor de begindatum valt? Dan heb je een leeg interval. Wat gebeurt er dan? Of is dit niet mogelijk?
$date is een DateTime object
$enddate is een string in een niet nader aangegeven formaat.
Om die 2 te kunnen vergelijken zal PHP dus moeten beslissen om $date van object om te zetten naar een string.
DateTime::toString() zou dan aangeroepen moeten worden, maar ik betwijfel of die bestaat.
En wat zou er dan uit moeten komen als string? 2020-07-06 of 7/6/2020 ?
Nog los van de vraag hoe $enddate er uit ziet.