Verschil in datums berekenen
Er gaat iets fout maar ik zie niet waar. Het aantal dagen blijft altijd op 0 staan. Ik heb de echo's laten staat zodat er kan gecontroleerd worden of de explode goed werkt en dat blijkt ook zo te zijn.
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>';
gezien $row['datum'] denk ik dat het uit een database komt?
en dan in php
echo $row['verschil'];
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_to-days
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'
ah, dan kijken we nog even in de manual en dan zien we dat die functie inderdaad maar 1 parameter nodig heeft, omdat het niet gaat om het verschil tussen 2 datums, maar om het verschil tot vandaag.
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)
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)
@Ivo P: 735971 is het verschil dat ik krijg als uitkomst voor een startdatum op 8-1-2015 tot en met vandaag??? Wat gaat hier fout?
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?
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
oja, dat was het.
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.
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.
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?
Er moet een verschil berekend worden tussen een datum in mysql en de datum van vandaag. Dit moet door een loop met meerdere resultaten.
Er moet een verschil berekend worden tussen een datum in mysql en de datum van vandaag. Dit moet door een loop met meerdere resultaten.
dat berekent hij dus per record. Nog voordat je een loop start.
dus ik snap niet waarom jij denkt dat er een probleem gaat zijn
dus ik snap niet waarom jij denkt dat er een probleem gaat zijn
Ha nee, net klaar met testen en inderdaad het is geen probleem ;-)
Thanks.
Thanks.
MySQL heeft daar functies voor:
Of
De eerste berekent het verschil in dagen, bij de tweede kan je een unit opgeven
Of
De eerste berekent het verschil in dagen, bij de tweede kan je een unit opgeven
Ja had ik ook zien staan in de manual.
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?
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




