Verschil tussen 2 data berekenen

Door Marijn , 18 jaar geleden, 9.221x bekeken

Met dit script is het mogelijk om het verschil in dagen tussen 2 verschillende daa uit te rekenen.
Het script is geplaatst onder Gevorderd omdat je nog wel wat dingen moet aanpassen zoals de verbinding met mysql, de velden voor de data, eventueel een actie die moet gebeuren wanneer het kleiner is dan...

Dit script is bijvoorbeeld te gebruiken voor een factuur systeem. Het kan controleren of een factuur over datum is. Dan moet je dus een datum veranderen voor de huidige datum. Dan het script draaien als cronjob.

Commentaar is welkom!

Gesponsorde koppelingen

PHP script bestanden

  1. verschil-tussen-2-data-berekenen

 

Er zijn 18 reacties op 'Verschil tussen 2 data berekenen'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


18 jaar geleden
 
0 +1 -0 -1
Doe eerst eens google'en....
mysql datediff en sql date_diff
GaMer B
GaMer B
18 jaar geleden
 
0 +1 -0 -1
Ik wil het niet afkraken, ziet er goed uit et cetera, maar waarom doe je het verschil tussen twee data niet gewoon via de database uitrekenen? Ik zie namelijk dat je die twee data uit een tabel haalt...
Ed
Ed
18 jaar geleden
 
0 +1 -0 -1
Marijn
marijn
18 jaar geleden
 
0 +1 -0 -1
Een vriend wou iets als dit doen, en hadden poosje zitten zoeken naar een geschikte reken manier met mysql. Konden zo snel niets vinden, dus maar even dit scriptje geschreven. Dacht dat er misschien wel meer mensen waren die er wat aan zouden hebben.
Verder was in benieuwd wat jullie van mijn manier van scripten vonden. Of er verbeter puntjes of puntjes van commentaar zijn. Kan ik weer van leren.
Wist dus niet dat het ook direct met mysql kon. Is inderdaad wat handiger. Maargoed, voor de liefhebber...:P Eventueel is het ook mogelijk om dmv van dit script aantal seconden, minuten, uren, dagen, weken, maanden, jaren, whatever te berekenen. Weet niet of dat ook kan met mysql?

Overigens is het natuurlijk wel handig als je niet met mysql werkt, maar gewoon 2 data hebt.
GaMer B
GaMer B
18 jaar geleden
 
0 +1 -0 -1
Aantal seconden, minuten, uren, dagen, weken, maanden, kwartalen, jaren en ga zo maar door is allemaal mogelijk in (My)SQL.
Marijn
marijn
18 jaar geleden
 
0 +1 -0 -1
Oké, nouja voor de gene die het niet via mysql willen doen, voila!:P

Anders is het script misschien nuttig voor de gene die niet met SQL werken maar gewoon 2 variabelen hebben met een datum.

Ander commentaar (wat geen betrekking heeft op het nut) is natuurlijk nog welkom!
Ericbruggema x
ericbruggema x
18 jaar geleden
 
0 +1 -0 -1
Je script werkt niet eens goed ;) de variabel $verschil bestaat namelijk niet en daardoor werkt je script totaal niet. Ook zou ik je aanraden om gewoon een functie te maken die het berekenen voor je doet... owh wacht laat ik eens een functie maken!

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
function berekenDatumVerschil($startDatum = "0000-00-00", $eindDatum = "0000-00-00", $maxDagen = 1)
{
    list($startJaar,
         $startMaand,
         $startDag) = explode("-", $startDatum);
            
    list($eindJaar,
         $eindMaand,
         $eindDag) = explode("-", $eindDatum);

    // Weergeven in secondes
    $tijdstart = mktime('00',
                        '00',
                        '00',
                        $startMaand,
                        $startDag,
                        $startJaar);
    $tijdeind = mktime('00',
                       '00',
                       '00',
                       $eindMaand,
                       $eindDag,
                       $eindJaar);
                          
    $verschilDagen =  floor(($tijdEind - $tijdStart) / (24 * 60 * 60))
    $verschilUitkomst = ($verschilDagen < $maxDagen) ? "Kleiner" : "Groter";

    return array("dagen" => $verschilDagen,
                 "enzo"  => $verschilUitkomst);

}


Ach, credits? surf ff naar visfreaks.nl :) en vertel al je vrienden er over! dat zijn voor mij credits genoeg

PS. niet getest maar volgens mijn editor zonder syntax fouten ;)

Oh en zo leer je ook weer wat List doet ;)


18 jaar geleden
 
0 +1 -0 -1
Waarom in hemelsnaam?
Bovendien klopt dat ding van jouw ook niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
var_dump(berekenDatumVerschil('2008-12-12','2009-12-12'));
/* Levert:
array(2) {
  [
"dagen"]=>
  float(0)
  [
"enzo"]=>
  string(7) "Kleiner"
}
?>

Nadat "Parse error: syntax error, unexpected T_VARIABLE" moest worden opgelost. En omgekeerd komt er hetzelfde uit.
Bovendien kan je volgens mij beter gebruik maken van strtotime.

Dus laat dat credits gedoe maar achterwegen.
Ericbruggema x
ericbruggema x
18 jaar geleden
 
0 +1 -0 -1
Ik hoop dat er niet zoveel gebruikers zijn als bovenstaande Karl, positive benadering werkt vele malen beter dan jou manier. Owh en dat je wel 1 puntcomma moest toevoegen is idd nogal een hoop werk. Tja ik schreef ook al dat alles uit het hoofd was gedaan.

En tuurlijk kun je gebruik maken van strtotime, maar dit werkt veel leuker!

Bij deze dan de werkende code, om het gezeik te beeindigen en de TS ietsje te helpen (gaat me totaal niet om karl, maar wel om de ts)

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
40
41
42
43
44
45
<?php

error_reporting(E_ALL);

function
berekenDatumVerschil($startDatum = "0000-00-00", $eindDatum = "0000-00-00", $maxDagen = 1)
{

    list($startJaar,
         $startMaand,
         $startDag) = explode("-", $startDatum);

    list($eindJaar,
         $eindMaand,
         $eindDag) = explode("-", $eindDatum);

    // Weergeven in secondes
    $tijdStart = mktime('00',
                        '00',
                        '00',
                        $startMaand,
                        $startDag,
                        $startJaar);
    $tijdEind = mktime('00',
                       '00',
                       '00',
                       $eindMaand,
                       $eindDag,
                       $eindJaar);

    $verschilDagen    = floor(($tijdEind - $tijdStart) / (24 * 60 * 60));
    $verschilUitkomst = ($verschilDagen < $maxDagen) ? "Kleiner" : "Groter";

    return array("dagen" => $verschilDagen,
                 "enzo"  => $verschilUitkomst);

}


print_r(berekenDatumVerschil("2008-12-12",
                             "2009-12-12",
                             10));
                            
print_r(berekenDatumVerschil("2008-01-12",
                             "2008-01-13",
                             10));

?>


18 jaar geleden
 
0 +1 -0 -1
Quote:
ericbruggema schreef op 12.05.2009 13:06
Ik hoop dat er niet zoveel gebruikers zijn als bovenstaande Karl, positive benadering werkt vele malen beter dan jou manier. Owh en dat je wel 1 puntcomma moest toevoegen is idd nogal een hoop werk. Tja ik schreef ook al dat alles uit het hoofd was gedaan.

Je test een script niet eens, en vind gelijk dat het goed is en wilt er credits voor hebben. Dan krijg jij van mij discredits. Ik geef verder alleen aan dat jou script dus een fout heeft, welliswaar alleen een puntkomma, maar dat is denk ik toch wel het belangrijkste.

Quote:
En tuurlijk kun je gebruik maken van strtotime, maar dit werkt veel leuker!

Veel leuker vs. veel beter, geef mij dan maar veel beter. met strtotime kan je teminste ook nog op verschillende manier je datum ingeven. Ook kan je er dan nog een controle op doen dat je geen onzin data als 31-13-2009 kan invoeren. En het is ook nog eens kleiner ook (welliswaar zonder controle op onzin data).

Quote:
Bij deze dan de werkende code, om het gezeik te beeindigen en de TS ietsje te helpen (gaat me totaal niet om karl, maar wel om de ts)

Waarom zou er een script moeten komen als de database dit ookal kan uitrekenen. Als je dit gewoon voor los wilt maken, dan lijkt het mij juist beter dat je ook nog maanden, dagen, uren en misschien nog wel secondes in verschil terug krijgt. Maar eigenlijk is dat ook weer onzin, want je kunt al gebruik maken van de datetime class (class.datetime).
Ericbruggema x
ericbruggema x
18 jaar geleden
 
0 +1 -0 -1
@Karl, zoals ik al schreef was ik niet in de gelegenheid om het stukje te testen... op zich was er amper wat fout in de code opzich. Juist door zelf dingen uit te vogelen leer je meer... tuurlijk kun je bergen met functies gebruiken die precies doen wat jij wilt maar soms is het leuke juist om uit te vinden hoe ze werken.

Deze functie heb ik geschreven omdat niet iedereen dit wil doen middels een database. En deze dus ook zonder database te gebruiken is.

Maar goed, dit alles is geschreven voor de TS, juist om er wat van te leren.

Toch vind ik (en daar blijf ik bij) je beter op een andere manier had kunnen reageren, je las toch echt dat het uit het hoofd gedaan was en ja tuurlijk mag ik om credits vragen! :) daar ben ik 100% vrij in ;) en of de code nou werkt of niet, het ging/gaat om het idee en het idee van de TS heb ik in mijn opzet even verduidelijkt... hopelijk kan de TS er wat mee... en eventueel andere gebruikers :)


18 jaar geleden
 
0 +1 -0 -1
Opzich vind ik het niet zo erg dat dat script niet werkt. Het enige wat ik er wel erg aan vind is dat je credits vraagt. Als je niet zeker weet of je script werkt moet je ook geen credits vragen vind ik, als je dat bij het tweede script had gedaan dan had ik daar geen punt van gemaakt.
Natuurlijk is het goed om te prutsen, daar leer je inderdaad van, maar als ik pruts dan wil ik dat het goed is, dat het werkt, dat het net is. Zo kan je gewoon dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$begin
= strtotime("12-12-2008");
$eind = strtotime("12-12-2009");
$verschil = $eind - $begin;
$dagen = $verschil / (60*60*24);
var_dump($dagen);
?>

Dat kan dan natuurlijk veel verder uitgebreid worden, met controle op de data (bij onzin data geeft strtotime false terug). En dat ie ook veel meer terug geeft.
Als je geen database hebt dan moet je inderdaad op zoiets terug vallen, maar het liefst gebruik ik dan gewoon functie's die php mij geeft, zoals die datetime class (behalve als ik zeker weet dat die slecht zijn zoals bijvoorbeeld magic quotes).
Ericbruggema x
ericbruggema x
18 jaar geleden
 
0 +1 -0 -1
Tja, mijn mening is dat je ook voor concepten credits mag vragen! (misschien is het ook verkapte reclame hoor).

maar goed :) hoop dat de TS er wat aan heeft! :)
Marijn
marijn
18 jaar geleden
 
0 +1 -0 -1
Nogmaals... Nog nooit eerder met data gerekend, dus dit als eerste optie gegeven. Overigens kon ik op phphulp ook niet echt iets vinden over hoe het nou wel moest. Ik hoop ook dat mensen door dit script/commentaar nu een idee krijgen hoe het werkt. En dat ik er zelf van leer natuurlijk.
Laat dit zinloze discussies achterwege, kat niet gelijk iedereen af, en blijf ff ontopic! Jullie zijn toch geen kleuters meer?

Ik zal mijn script even aanpassen zodat hij wel werkt. Ook ik heb hem zelf niet getest. Ook dat zal ik even doen.
Jesper Diovo
Jesper Diovo
18 jaar geleden
 
0 +1 -0 -1
Beetje jammer allemaal.

Om je script wat te verbeteren kun je nog wat doen aan je foutafhandeling met je query.
Maarten
maarten
18 jaar geleden
 
0 +1 -0 -1
waarom include je gewoon niet config.php met de mysql gegevens dat gaat veel sneller
Marijn
marijn
18 jaar geleden
 
0 +1 -0 -1
oh my god maarten... Dit is een SCRIPT. geen complete website.
De opbouw moeten ze zelf weten.

En nee, dat gaat NIET sneller. bij meer pagina's is het wel handiger, dat is wat anders...

Bedankt voor de tip over foutafhandeling. Zou er even naar kijken.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Victor Php
Victor Php
18 jaar geleden
 
0 +1 -0 -1
hmm... ik heb nog niet echt goed bekeken, maar wat me opvalt is dat jij een nogal onoverzichtelijke manier gebruikt om met de db te connecten. En het is niet meestal localhost. Het kan ook iets anders zijn. =)
Doe gewoon dit:

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
<?php
$host
= ''; //Je server
$gb = ''; //Je gebruikersnaam
$ww = ''; //Je wachtwoord
$db = ''; //Naam van je database

mysql_connect( $host, $gb, $ww ) or die( mysql_error());
mysql_select_db( $db ) or die( mysql_error());[/code]


Ik bekijk je script morgen verder, want ik moet nu gaan.

-
edit-

Ik kon hem nu nog even bekijken en ik vind je script wel oke;)

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. verschil-tussen-2-data-berekenen

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.