Verschil in datums berekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Brecht S

Brecht S

10/01/2015 16:45:19
Quote Anchor link
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)
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
    // 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>';
 
PHP hulp

PHP hulp

06/11/2024 00:31:54
 
Ivo P

Ivo P

10/01/2015 17:03:24
Quote Anchor link
gezien $row['datum'] denk ik dat het uit een database komt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT TO_DAYS(datum, CURRENT_DATE) AS verschil, datum, .....
FROM tabel


en dan in php

echo $row['verschil'];

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_to-days
 
Brecht S

Brecht S

10/01/2015 17:08:25
Quote Anchor link
Dan krijg ik een foutmelding: Incorrect parameter count in the call to native function 'TO_DAYS'
 
Ivo P

Ivo P

10/01/2015 17:50:07
Quote Anchor link
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)
 
Brecht S

Brecht S

10/01/2015 18:00:38
Quote Anchor link
@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?
Gewijzigd op 10/01/2015 18:00:55 door Brecht S
 
Ivo P

Ivo P

10/01/2015 19:12:13
Quote Anchor link
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.
 
Brecht S

Brecht S

10/01/2015 19:39:34
Quote Anchor link
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.
 
Ivo P

Ivo P

10/01/2015 21:04:09
Quote Anchor link
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
 
Brecht S

Brecht S

10/01/2015 21:09:03
Quote Anchor link
Ha nee, net klaar met testen en inderdaad het is geen probleem ;-)
Thanks.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/01/2015 13:38:39
Quote Anchor link
MySQL heeft daar functies voor:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DATEDIFF(CURRENT_DATE, datum)

Of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT TIMESTAMPDIFF(DAY, datum, CURRENT_DATE)

De eerste berekent het verschil in dagen, bij de tweede kan je een unit opgeven
 
Brecht S

Brecht S

11/01/2015 14:13:13
Quote Anchor link
Ja had ik ook zien staan in de manual.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
TO_DAYS(CURRENT_DATE) - TO_DAYS(datum) 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
 



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.