Verschil in datums berekenen
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
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
// Start datum
$timestamp = $row['datum'];
$startdatum = date('Y-m-d', strtotime($timestamp));
$startdatumsplitsen = explode("-", $startdatum);
$startjaar = $startdatumsplitsen[0];
$startmaand = $startdatumsplitsen[1];
$startdag = $startdatumsplitsen[2];
// Eind datum
$einddatum = date('Y-m-d');
$einddatumsplitsen = explode("-", $einddatum);
$eindjaar = $einddatumsplitsen[0];
$eindmaand = $einddatumsplitsen[1];
$einddag = $einddatumsplitsen[2];
// Weergeven in secondes
$tijdstart = mktime('00', '00', '00', '$startmaand', '$startdag', '$startjaar');
$tijdeind = mktime('00', '00', '00', '$eindmaand', '$einddag', '$eindjaar');
// Verschil in dagen
$verschil = $tijdeind - $tijdstart;
$verschilDagen = floor($verschil/(24*60*60));
echo '<br><br>Dagen verschil = '.$verschilDagen.' dagen<br><br>';
echo 'startjaar: ' . $startjaar . '<br>';
echo 'startmaand: ' . $startmaand . '<br>';
echo 'startdag: ' . $startdag . '<br>';
echo 'eindjaar: ' . $eindjaar . '<br>';
echo 'eindmaand: ' . $eindmaand . '<br>';
echo 'einddag: ' . $einddag . '<br>';
$timestamp = $row['datum'];
$startdatum = date('Y-m-d', strtotime($timestamp));
$startdatumsplitsen = explode("-", $startdatum);
$startjaar = $startdatumsplitsen[0];
$startmaand = $startdatumsplitsen[1];
$startdag = $startdatumsplitsen[2];
// Eind datum
$einddatum = date('Y-m-d');
$einddatumsplitsen = explode("-", $einddatum);
$eindjaar = $einddatumsplitsen[0];
$eindmaand = $einddatumsplitsen[1];
$einddag = $einddatumsplitsen[2];
// Weergeven in secondes
$tijdstart = mktime('00', '00', '00', '$startmaand', '$startdag', '$startjaar');
$tijdeind = mktime('00', '00', '00', '$eindmaand', '$einddag', '$eindjaar');
// Verschil in dagen
$verschil = $tijdeind - $tijdstart;
$verschilDagen = floor($verschil/(24*60*60));
echo '<br><br>Dagen verschil = '.$verschilDagen.' dagen<br><br>';
echo 'startjaar: ' . $startjaar . '<br>';
echo 'startmaand: ' . $startmaand . '<br>';
echo 'startdag: ' . $startdag . '<br>';
echo 'eindjaar: ' . $eindjaar . '<br>';
echo 'eindmaand: ' . $eindmaand . '<br>';
echo 'einddag: ' . $einddag . '<br>';
en dan in php
echo $row['verschil'];
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_to-days
Dan krijg ik een foutmelding: Incorrect parameter count in the call to native function 'TO_DAYS'
gelukkig wilde dat ook precies doen, dus kunnen we volstaan met alleen dat datum-kolom als parameter en CURRENT_DATE achterwege laten.
(ik gebruik die functie eigenlijk nooit)
Toevoeging op 10/01/2015 18:07:15:
TO_DAYS(CURRENT_DATE) - TO_DAYS(datum) AS verschil is de juiste oplossing! Staat ergens in de manual - de eerste user comment!
Toevoeging op 10/01/2015 18:52:09:
Maar wat als er meerdere resultaten in de loop zitten? Dan is dit niet meer juist op deze manier. Is er daar een oplossing voor?
Gewijzigd op 10/01/2015 18:00:55 door Brecht S
to_days() berekent het aantal dagen sinds het jaar 0.
dus het verschil tussen to_days() van datum 1 en to_days() van datum2 is het verschil in dagen.
Maar dat bepaal je daarmee dus per record in je resultset.
Dat blijft dus kloppen.
Let er wel op, dat voor datums in de toekomst je verschil dan negatief is.
Er moet een verschil berekend worden tussen een datum in mysql en de datum van vandaag. Dit moet door een loop met meerdere resultaten.
dus ik snap niet waarom jij denkt dat er een probleem gaat zijn
Thanks.
Of
De eerste berekent het verschil in dagen, bij de tweede kan je een unit opgeven
Code (php)
1
2
3
2
3
TO_DAYS(CURRENT_DATE) - TO_DAYS(datum) AS verschil
DATEDIFF(CURRENT_DATE, datum) AS verschil
TIMESTAMPDIFF(DAY, datum, CURRENT_DATE) AS verschil
DATEDIFF(CURRENT_DATE, datum) AS verschil
TIMESTAMPDIFF(DAY, datum, CURRENT_DATE) AS verschil
Die zouden allemaal hetzelfde resultaat moeten geven.
Ik zat nog iets te denken: Zou er ook een mysql oplossing zijn om aantal dagen, maanden en jaren op te geven tussen 2 datums ineens?
Ik zou dit kunnen gebruiken voor een project overzicht om te kunnen zien hoelang een bepaald project heeft geduurd.
Maar er is wel nog een probleem hierbij. Het verschil ligt tussen een startdatum en de datum van vandaag wanneer het project lopende is. Maar als er een einddatum is ingevuld zal het tussen de startdatum en de einddatum zijn en niet meer de datum van vandaag. Hoe los ik dit dan het beste op?
Gewijzigd op 11/01/2015 17:23:08 door Brecht S