Ik heb een formulier waarop mensen zelf een ingangsdatum in kunnen voeren wat ook in een database gezet wordt. Daarna wil ik de mensen laten kiezen of ze 1 jaar 2 jaar of 3 jaar willen toevoegen aan de ingangsdatum. Hierdoor krijg je dus meteen een eind datum, deze eind datum wil ik ook graag in een database zetten.
Opsomming:
Wat de mensen zien:
Ingangsdatum: (zelf een datum invullen)
Einddatum: (kiezen uit 1, 2 of 3 jaar dmv dropdown menu)
Wat in de database moet:
Ingangsdatum: dd-mm-jjjj
Einddatum: dd-mm-jjjj
In de database zet je een datum (als DATE, niet als een of ander formaat dat je als mens in een zeker land zou gebruiken): 2017-08-23
Je kunt ofwel de einddatum opslaan, ofwel de gekozen duur opslaan.
De vraag was het eerste, dus dan is de code:
INSERT INTO tabel (foo, bar, ingangsdatum, einddatum)
VALUES ('foo', 'bar', '2017-08-31', '2017-08-31'+ INTERVAL 3 YEAR);
Let er wel op, dat als je met de ingangsdatum gaat schuiven, de einddatum niet vanzelf meeschuift.
Zou je een kolom "aantaljaar" hebben en die vullen met het getal 3, dan blijft dat kloppen.
[size=xsmall]Toevoeging op 23/08/2017 16:26:33:[/size]
@Jan
Met gebruik van / zal regel 2 waarschijnlijk gaan voor 6 mei
Verderop op regel 4 draai je dat om.
Je moet rekening houden met de notatie, Amerikaans of Nederlands. Ik heb het hier iets eenvoudiger d/mY
$date = '05/06/2011';
$date = strtotime($date);
$new_date = strtotime('+ 1 year', $date);
echo date('d/m/Y', $new_date);
/ gaat voor het "amerikaanse" formaat in php.
De - als scheider zal kijken wat de plek van het jaar is, de eerste of 3e plek en in het midden de maand verwachten.
Of je moet DateTime::createfromformat() gebruiken om een afwijkend formaat te gebruiken.
Maar handig is het misschien om de ingevoerde datum in 3 delen aan te laten leveren door het script.
Ik zou sowieso niet in PHP gaan frotten met de datum om die aan te passen: dat gaat eenvoudiger in de database. Al zou de periode gewoon opslaan als getal ook wel flexibel zijn.
Dezelfde date functies kun je ook gebruiken om de bijna verlopen perioden te vinden
SELECT *
FROM tabel
WHERE CURRENT_DATE + INTERVAL 30 DAY > einddatum;
-- of
WHERE CURRENT_DATE + INTERVAL 30 DAY > begindatum + INTERVAL periodekolom YEAR;