yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

Berechnung der Dauer zwischen zwei Zeitpunkten



Um die Dauer zwischen zwei Zeitpunkten zu berechnen, eignet sich die Funktion mktime() sehr gut.
PHP-Datei:
1
2
3
4
5
6
7
8
<?
// Angenommen, das Ergebnis ist am 24.05.2004 um 20:15:00 Uhr.

$jetzt=time();
$ereignis=mktime(201505242004);

$differenz=$ereignis-$jetzt;
?>


Mit diesem kleinen Script errechnet man die Sekunden, die bis zum Ereignis noch vor uns liegen: time() ermittelt die Sekunden vom 1.1.1970 bis jetzt, mktime() ermittelt die Sekunden, die vom 1.1.1970 bis zum Ereignis vergangen sein werden.
Ermittelt man davon die Differenz, so hat man die Sekunden, die von jetzt noch bis zum Ereignis vergehen werden.

Nun hat man eine Zahl heraus, man will aber nicht die Anzahl der Sekunden, sondern diese umgerechnet in Jahre, Monate, Tage, Stunden, Minuten, Sekunden haben.
Dies erledigt folgende Funktion:
PHP-Datei:
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
<?
function int2time($time) {
    
$temp=$time;
    if(
date("L")==1) {
        
$schalt=366;
    } else {
        
$schalt=365;
    }
    
    
// Jahresberechnung
    
$jahre=floor($temp/(60*60*24*$schalt));
    
$temp=$temp-($jahre*60*60*24*$schalt);
    
    
// Monate
    
$monate=floor($temp/(60*60*24*30.5));
    
$temp=$temp-($monate*60*60*24*30.5);
    
$temp=round($temp);
    
    
// Tage
    
$tage=floor($temp/(60*60*24));
    
$temp=$temp-($tage*60*60*24);
    
    
// Stunden
    
$stunden=floor($temp/(60*60));
    
$temp=$temp-($stunden*60*60);
    
    
// Minuten
    
$minuten=floor($temp/60);
    
$temp=$temp-($minuten*60);
    
    
// Sekunden
    
$sekunden=$temp;
    
    return array(
$jahre$monate$tage$stunden$minuten$sekunden);
}
?>

Diese liefert als Ergebnis die ihr übergebene Zahl als einen Array zurück: Index 0 sind die Jahre, 1 sind die Monate, 2 die Tage und weiter so abgestuft.
Zur richtigen Jahresberechnung wird erst ermittelt, ob dieses Jahr ein Schaltjahr oder nicht ist und entsprechend die Tage als ein Jahr genommen.
Der einzige kleine Fehler, den diese Funktion hat, ist, dass die Monate nicht exakt berechnet werden könnten. Da einige Monate 30, andere 31 und wiederum andere 28 (bzw. 29) Tage besitzen, kann es hier in Ausnahmefällen zu kleinen Umrechnungsfehlern kommen. Um diesem möglichst gut entgegen zu wirken, multipliziert man mit dem Schnittwert von 30,5 Tagen pro Monat.

Das wars.
Nun noch einmal das gesamte Script, in einem Blick mit Anwendungsbeispiel:
PHP-Datei:
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
46
47
48
49
50
<?
function int2time($time) {
    
$temp=$time;
    if(
date("L")==1) {
        
$schalt=366;
    } else {
        
$schalt=365;
    }
    
    
// Jahresberechnung
    
$jahre=floor($temp/(60*60*24*$schalt));
    
$temp=$temp-($jahre*60*60*24*$schalt);
    
    
// Monate
    
$monate=floor($temp/(60*60*24*30.5));
    
$temp=$temp-($monate*60*60*24*30.5);
    
$temp=round($temp);
    
    
// Tage
    
$tage=floor($temp/(60*60*24));
    
$temp=$temp-($tage*60*60*24);
    
    
// Stunden
    
$stunden=floor($temp/(60*60));
    
$temp=$temp-($stunden*60*60);
    
    
// Minuten
    
$minuten=floor($temp/60);
    
$temp=$temp-($minuten*60);
    
    
// Sekunden
    
$sekunden=$temp;
    
    return array(
$jahre$monate$tage$stunden$minuten$sekunden);
}

// Angenommen, das Ergebnis ist am 24.05.2004 um 20:15:00 Uhr.

$jetzt=time();
$ereignis=mktime(201505242004);

$differenz=$ereignis-$jetzt;

$zeit=int2time($differenz);

echo 
'Es sind noch '.$zeit[0].' Jahre, '.$zeit[1].' Monate, '.$zeit[2].' Tage, '.$zeit[3].' Stunden, '.$zeit[4].' Minuten und '.$zeit[5].' Sekunden bis zum 24.05.2004, 20:15:00 Uhr.';

// Ergäbe z.B.
Es sind noch 0 Jahre2 Monate17 Tage13 Stunden1 Minuten und 40 Sekunden bis zum 24.05.200420:15:00 Uhr.
?>





Geschrieben von Phil Marx am 18.06.2004 (10520x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

Tauscht man in Zeile 42

$differenz=$ereignis-$jetzt;

um in

$differenz=$jetzt-$ereignis;

so hat man das Script umfunktioniert zu einem Script, was einem das Alter ausrechnet... :)
Geschrieben von Phil Marx