Ophogen datum in while-lus

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Andy Kort

Andy Kort

05/07/2020 12:13:55
Quote Anchor link
Goedemorgen,

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
 
PHP hulp

PHP hulp

28/03/2024 23:44:03
 
- Ariën  -
Beheerder

- Ariën -

05/07/2020 12:50:31
Quote Anchor link
Zou je jouw code even tussen code-tags willen plaatsen?
 
Andy Kort

Andy Kort

05/07/2020 13:00:02
Quote Anchor link
Jazeker, maar hoe kan ik dit 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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
        }
}

?>


<form id="form2" action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo htmlentities($_SERVER['PHP_SELF']); ?>
" 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
 
Adoptive Solution

Adoptive Solution

05/07/2020 13:09:16
Quote Anchor link
Alle dagen binnen het tijdvak :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>
 
- Ariën  -
Beheerder

- Ariën -

05/07/2020 13:26:06
Quote Anchor link
Tussen [code] en [/code] tags kan je jouw code plaatsen. Zie ook de Veelgestelde Vragen.
Gewijzigd op 05/07/2020 13:26:27 door - Ariën -
 
Andy Kort

Andy Kort

05/07/2020 13:26:15
Quote Anchor link
Dank je wel. Dit doet het wel. Mvg
 
Thomas van den Heuvel

Thomas van den Heuvel

05/07/2020 15:49:32
Quote Anchor link
Bij vraagstukken zoals deze is het ook handig om te analyseren waarom het in eerste instantie misging, in plaats van het (enkel) aandragen van een oplossing. Op deze manier leer je niet zoveel eigenlijk niets.

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?
 
Ivo P

Ivo P

06/07/2020 11:07:32
Quote Anchor link
while ($date<=$endddate) {

$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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.