Rekenen met datum
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???
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
Vindt je Jens
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.
Code (php)
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
Doe de laatste maar.
Daar is niet zo veel over te vinden, blijkt.
Heeft iemand daar ooit iets mee gedaan?
hier misschien wat aan?
Heb je 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)
1
2
3
4
5
6
7
8
9
10
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); ?>
$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)
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
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>';
}?>
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
Gewijzigd op 26/08/2010 19:33:26 door Arjan -
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!
@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!