Door
Andy Kort
op 05-07-2020 12:13
gewijzigd op 05-07-2020 12:57
1.736 views
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.
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?
$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 ?