Rekenen met datum

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marc rc is as

Marc rc is as

25/08/2010 20:42:47
Quote Anchor link
Er staan hier op het forum al een aantal voorbeelden maar ik kan de mijne er niet tussen vinden.

Ik heb een datum in mijn database opgeslagen als DATE.
In het script kan ik een datum van nu ophalen met date()

Ik wil graag de opgeslagen datum uit de datbase aftrekken van de datum van nu.
Dan kan ik zien hoe lang iemand lid is van een vereniging.

Hoe doe ik dat???
 
PHP hulp

PHP hulp

26/12/2024 12:13:40
 
Jens V

Jens V

25/08/2010 20:54:19
Quote Anchor link
Vindt je hier. In plaats van dat door php te laten doen, doe je het beter in de MySQL zelf. Voor de huidige datum gebruik je dan CURRDATE().

Jens
 
Marc rc is as

Marc rc is as

25/08/2010 21:37:19
Quote Anchor link
Snap er niet veel van.
Met CURRDATE kan ik dan een huidige dutum gebruiken.

SELECT *
FROM leden
WHERE Status_ID='1'
ORDER BY Lid_Datumlid, Lid_Achternaam ASC";

Hoe zou ik dat dan moeten plaatsen in dit stukje.
Mijn datumveld is Lid_Datumlid.
 
SilverWolf NL

SilverWolf NL

25/08/2010 21:43:36
Quote Anchor link
Zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT velden,DATEDIFF(CURRDATE(),Lid_Datumlid) AS aantal_dagen
FROM leden
WHERE Status_ID='1'
ORDER BY Lid_Datumlid, Lid_Achternaam ASC
 
Justin S

Justin S

25/08/2010 21:46:12
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DATEDIFF(CURRDATE() - Lid_Datumlid) as lidtijd FROM leden WHERE Status_ID = 1 ORDER BY Lid_Datumlid, Lid_Achternaam ASC


Probeer deze eens. lidtijd is de op te halen variabele, je moet voor de DATESUB wel de overige velden ingeven die je wilt ophalen aangezien * niet goed is voor je databaseperformance.

Edit: Te laat...
Gewijzigd op 25/08/2010 21:46:45 door Justin S
 
- SanThe -

- SanThe -

25/08/2010 22:57:53
Quote Anchor link
CURRDATE .... of CURDATE?
Doe de laatste maar.
 
Marc rc is as

Marc rc is as

25/08/2010 23:57:29
Quote Anchor link
Klopt, dat was ff zoeken maar dat had ik ook ontdekt. Toch bedankt voor jullie reactie ik ben er al een end verder mee. Ben nu zoekende om deze dagen weer te geven als jaren - maanden -dagen.

Daar is niet zo veel over te vinden, blijkt.

Heeft iemand daar ooit iets mee gedaan?
 
- SanThe -

- SanThe -

26/08/2010 00:32:06
Quote Anchor link
Heb je hier misschien wat aan?
 
Marc rc is as

Marc rc is as

26/08/2010 19:20:55
Quote Anchor link
Ik ben door jullie prima op weg geholpen maar ik krijg nog een foutmelding. Daar kom ik nog niet uit.

Ik krijg nu een uitkomst maar een 2e volgt niet. Dat blijkt ook uit de foutmelding.
Hij kan de berekening niet herhalen (volgens mij)

Dit is de foutmelding: Fatal error: Cannot redeclare aantaldagen() (previously declared in jubileum.php:74) in jubileum.php on line 74.

Dit is het stuk code:

<code>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$sql
= "SELECT *,
                MONTH (Lid_Datumlid) AS formatlidmaand,
                DAYOFMONTH (Lid_Datumlid) AS formatliddag,
                YEAR (Lid_Datumlid) AS formatlidjaar
                FROM leden
                WHERE Status_ID='1'
                ORDER BY Lid_Datumlid, Lid_Achternaam ASC"
;
            
$resultaat = mysql_query($sql); ?>

<h1>Jubileum kalender</h1>
<table width="300" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" class="table"><strong>Lid sinds</strong></td>
<td width="50%" class="table"><strong>Naam</strong></td>
<td width="50%" class="table"><strong>Duur lidmaatschap</strong></td>
</tr>
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
28
29
30
31
32
33
34
35
36
37
38
39
<?php
while($rij = mysql_fetch_array($resultaat)){
$id=$rij['Lid_ID'];
    echo '<tr>';
    echo '<td class="table">' . $rij['Lid_Datumlid'] . '</td>';
    echo '<td class="table">' . $rij['Lid_Voornaam'] . ' ' . $rij['Lid_Tussenvoegsel'] . ' ' . $rij['Lid_Achternaam'] . '</td>';
    
function
aantaldagen($d,$m,$y) {
    global $day, $month, $year;
    $day=(strval($d)>=1) ? strval($d) : strval(date("d"));
    $day=(strlen($day)<=1) ? "0".$day : $day;
    $month=(strval($m)>=1) ? strval($m) : strval(date("m"));
    $month=(strlen($month)<=1) ? "0".$month : $month;
    $year=(strval($y)>=1970) ? strval($y) : strval(date("Y"));
    if((strval($day)<>strval(date("d", mktime(0,0,0,$month,$day,$year))))
        or (strval($month)<>strval(date("m", mktime(0,0,0,$month,$day,$year))))
        or (strval($year)<>strval(date("Y", mktime(0,0,0,$month,$day,$year))))) {
        return "De datum ".$day."-".$month."-".$year." bestaat niet";
        exit;
    }
elseif(mktime(0,0,0,$month,$day,$year)>mktime(0,0,0,date("m"),date("d"),date("Y"))) {
        return "De datum ".$day."-".$month."-".$year." ligt in de toekomst";
        exit;
    }
else {
        $yeardiff=strval((date("Y"))-($year))+$hulp=((strval((date("m"))-(strval($month)))<0)
            or ((strval((date("d"))-(strval($day)))<0)
            and (strval((date("m"))-(strval($month)))<=0)))
            ? -
1 : 0;
        $monthdiff=(strval((date("m"))-($month))+$hulp=(strval((date("d"))-(strval($day)))<0)
            ? (
$hulp=(strval((date("d"))-(strval($day)))<0) ? +11 : +12) : 12) % 12;
        $daydiff=strval((date("d"))-($day))+$hulp=(strval((date("d"))-(strval($day)))<0)
            ?
strval(date("d",mktime(0,0,0,$month+1,0,$year))) : 0;
        return "De datum ".$day."-".$month."-".$year." is ".$daydiff.($daytext=($daydiff==1)
            ?
" dag " : " dagen ").$monthdiff.($monthtext=($monthdiff==1)
            ?
" maand " : " maanden ").$yeardiff." jaar geleden";
    };
};

    echo '<td class="table">' . aantaldagen($rij['formatliddag'],$rij['formatlidmaand'],$rij['formatlidjaar']) . '</td>';
    echo '</tr>';
}
?>

</table>
</code>
Gewijzigd op 26/08/2010 19:21:54 door Marc rc is as
 
Arjan -

Arjan -

26/08/2010 19:30:57
Quote Anchor link
Zet die hele functie is buiten de while loop. Een functie is gemaakt om 'm één of meerdere keren te kunnen aanroepen. Een functie binnen een while loop is dus niet nodig en mag eveneens niet. Vandaar dat ie aangeeft dat de functie al gedeclareerd is.
Gewijzigd op 26/08/2010 19:33:26 door Arjan -
 
Tony AH

Tony AH

26/08/2010 19:42:29
Quote Anchor link
Ik ben voorstander van de timestamp.

Doe vanuit je php script een timestamp (time();) wegschrijven naar je database (sql)

wil je het weergeven met je php, haal je het uit de database en dan date('d-m-y), $timestamp); op paginatje 1 en op een andere pagina kun je van die zelfde timestamp bv alleen het jaar laten zien, of nog meer details zoals de uur:min

Verder kun je makkelijk door middel van een array rekenen.
$tijdArray = array('day' => '86400', 'hour' => '3600', 'min' => 60);

wil je dan datum van een dag later => $timestamp + $tijdArray['day'];

Persoonlijk vind ik dit DE oplossing!
 
Marc rc is as

Marc rc is as

26/08/2010 20:25:07
Quote Anchor link
@Arjen: Bedankt dat is het. Ik had die functie daar neergezet om te testen. Later zou ik hem dan apart gaan zetten. tss..

@Anthony: Ik heb mijn formulier voor het toevoegen van leden gemaakt met een select voor jaar, maand, dag. Hoe ik dat dan moet omzetten naar een timestamp zou ik niet weten.
Ben allang blij dat het nu werkt!

Grote dank aan alle hulp!
 



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.