Rekenen met datums

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michiel

Michiel

09/05/2008 16:46:00
Quote Anchor link
Mijn oververhit hoofd plus het feit dat ik weinig ervaring heb met het werken met datums bezorgt me een probleempje.

Stel ik heb een datum in de vorm van 2008-04-18. Nu zou ik willen bepalen of die datum vroeger dan de huidige datum is.

Bijvoorbeeld
2009-04-15 is LATER dan NU.
2007-06-13 is VROEGER dan NU.

Een simpel rekensommetje van huidige datum en gegeven datum, maar ik weet niet naar wat ze te converteren, of welke functies te gebruiken. Heeft iemand raad?
 
PHP hulp

PHP hulp

21/05/2024 21:12:52
 
Jacco Engel

Jacco Engel

09/05/2008 16:53:00
Quote Anchor link
Ik zou het denk ik met mysql oplossen maar ja wie ben ik :P
 
Michiel

Michiel

09/05/2008 17:03:00
Quote Anchor link
nouja met mysql, het is onderdeel van een $_POST valideer functie VOOR ik het in een database opsla... dus in dit geval zie ik dat zo niet echt zitten
 
Noppes

Noppes

09/05/2008 17:10:00
 
Jan Aart

Jan Aart

09/05/2008 17:16:00
 
Michiel

Michiel

09/05/2008 18:20:00
Quote Anchor link
Heb het opgelost, om toch maar volledig te zijn (en opmerkingen van mijn oplossing toe te laten) hier de code

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$datum = "2009-04-15";
       $timestamp_datum = strtotime($datum);
       $timestamp_nu = time();

if  ($timestamp_datum - $timestamp_nu) < 0 ) {
echo "datum is in het verleden"; }
Gewijzigd op 01/01/1970 01:00:00 door Michiel
 
Jesper Diovo

Jesper Diovo

09/05/2008 18:20:00
Quote Anchor link
CURRENT_DATE < '2009-04-15' OR CURRENT_DATE > '2007-06-13'

Beiden kloppen.

Edit: waarom met timestamps als je met data ook kan rekenen? Een timestamp is niks waard.

20090415 - 20080509 is ook groter dan 0.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
GaMer B

GaMer B

09/05/2008 18:26:00
Quote Anchor link
@Michiel, mag ik je verwijzen naar dit topic. Hopelijk zie je dan in dat timestamps 'not done' zijn.
 
Michiel

Michiel

09/05/2008 18:28:00
Quote Anchor link
Ja, daarom ook dat ik vroeg hoe jullie het zouden doen, iedereen spreekt hier over doe het met mysql.

Terwijl mijn script een POST variabel check script, en mijn gegevens uit post formulieren komen en NIET uit de database.

Tenzij ik het mis heb dat current_date enkel werkt in queries....

Het moet volgens mij dus via PHP... tenzij ook deze denkwijze mis is...

Ik sla mijn datum (indien geldig) ook niet op als timestamp maar als date, maar eerst moet ik dus checken of het geldig is en daarvoor moet ik rekenen met een datum in PHP...

EDIT: 20090415 - 20080509 is ook groter dan 0.
Nou daar heb ik wat aan, dat lijkt me idd de oplossing in PHP te zijn....! Hier zocht ik dus naar denk ik ;)
Gewijzigd op 01/01/1970 01:00:00 door Michiel
 
Jesper Diovo

Jesper Diovo

09/05/2008 18:34:00
Quote Anchor link
Als je het daarna in een database opslaat, sla je de plank wel mis. Dat kan namelijk óók met SQL.

PHP oplossing, zonder timestamps:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$sDatum
= date("Ymd");
$pDatum = str_replace("-", "", $_POST['datum']);

$sDiff = $sDatum - $pDatum;
if($sDiff < 0) {
  echo 'Al geweest!';
}
else {
  echo 'Moet nog komen';
}

?>
 
GaMer B

GaMer B

09/05/2008 18:34:00
Quote Anchor link
Wat ga je doen met die POST variabel? Ik mag hopen dat je het formulier waar je het over hebt, gaat verwerken (in een database).

Als dat het geval is, dan kun je met behulp van de query van Djemo bijvoorbeeld kijken naar jouw eisen. Wanneer die eisen kloppen, dan kun je het formulier verwerken (dus toevoegen) in je database.

Als dat niet het geval is, heb ik de vraag: Wat moet je dan met dat formulier?
 
Michiel

Michiel

09/05/2008 19:55:00
Quote Anchor link
Ja het wordt opgeslaan in de database. Maar niet voor de check van de datum. De datum die men kiest moet bijvoorbeeld voor de huidige datum zijn.


formulier wordt gesubmit => check datum => indien geldig: database; indien ongeldig: formulier weer weergeven + foutmelding.

Nu zeg jij dat je die check datum met een query zou doen via mysql...

Echter is er van opslaan in database nog geen sprake, dus ik snap dit niet. Gebruik je nu een query om te checken of iets klopt... zonder ook maar iets van gegevens te kunnen queryen.

Kan je daar een concreet voorbeeld van geven dan? Want ik snap dit niet en zou het graag snappen. Ik zou niet weten welke query uit te voeren... maar zou het toch graag begrijpen..
 
Joren de Wit

Joren de Wit

09/05/2008 20:10:00
Quote Anchor link
Er is helemaal niets mis mee om deze controle met PHP uit te voeren, vooral niet aangezien je dat eerst wilt doen voordat je de datum daadwerkelijk in de database gaat zetten...

Dus allereerst een controle met checkdate() of de datum wel geldig is en daarna een controle via timestamps of de datum wel in het verleden ligt. Pas daarna dus invoeren in de database in het formaat yyyy-mm-dd. Vanaf dan gebruik je enkel nog de database om te rekenen met de data die je opgeslagen hebt.

Als je postgresql (of een andere goede database) gebruikt, kun je ook een CHECK constraint aanbrengen op de datum kolom. Op die manier kun je het op database niveau onmogelijk maken om een datum in de toekomst in te voeren. Helaas is dit met MySQL niet mogelijk...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
GaMer B

GaMer B

09/05/2008 20:16:00
Quote Anchor link
Inderdaad, als je de check voordat je het in de database stopt wilt doen, dan is het net zo makkelijk om dat in PHP te doen. Je kunt overigens wel met de IF() statement in MySQL condities creëren, maar dat lijkt me weer overkill.
 
Joren de Wit

Joren de Wit

09/05/2008 20:24:00
Quote Anchor link
Condities in SQL doe je met een CASE, de IF functie heeft een iets andere werking. Je zou er bijvoorbeeld voor kunnen kiezen om als er een datum in de toekomst gekozen wordt, automatisch de huidige datum in te voeren:
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
INSERT INTO tabel
(
    kolomnaam,
    datumveld
)
VALUES
(
    'waarde',
    CASE WHEN '2008-06-06' > CURRENT_DATE THEN
        CURRENT_DATE
    ELSE
        '2008-06-06'
    END
)

Maar goed, of dit nuttig is door dit zonder melding in te voeren, kun je je afvragen...
 



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.