Systemvoraussetzung
- Linux
- Windows
- PHP 3
- PHP 4
- PHP 5
Datei(en)
GregorianToJD.php
Problem
Sie haben zwei Datumsangaben und möchten die Anzahl der Tage ermitteln,
die zwischen diesen Datumsangaben liegen. Mögliche Fragen, die diese Problemstellung
umschreiben, wären zum Beispiel:
- Wie alt sind Sie in Tagen?
- Vor wie viel Tagen ist Mozart gestorben?
- In wie vielen Tagen ist die nächste totale Sonnenfinsternis in Deutschland?
- In wie vielen Tagen läuft ein AuktionsAngebot
aus?
Mit den Ergebnissen dieser Frage könnten Sie weitere Berechnungen durchführen,
die Anzahl der Tage als Counter für dieses Ereignis auf Ihrer Website
präsentieren oder einfach nur als Information für Ihre Besucher bereithalten.
Lösung
Die Lösung für dieses Problem ist relativ simpel. PHP bietet bereits eine vorgefertigte
Lösung in Form einer Funktion an. Mit der Funktion GregorianToJD()
können wir unsere Datumsangaben vom Gregorianischen Kalender zum Julianischen
Datum hin konvertieren und erhalten als Ergebnis die Anzahl der
Tage, die seit dem 01.01.4713 v. Chr. verstrichen sind.
Um die Tage zwischen den beiden Ereignissen zu erhalten, subtrahiert ()
man
nur noch das jüngste Datum vom ältesten Datum. Bitte achten Sie aber darauf,
nur Datumsangaben zwischen 4714 v. Chr. bis 9999 n. Chr. zu benutzen.
function seDay($begin,$end,$format,$sep)
@param string $begin
@param string $end
@param string $format
@param string $sep
@return integer
Als Parameter erwartet die Funktion zwei Datumsangaben ($begin, $end)
(39), einmal das jüngste und einmal das älteste Datum. Dabei ist es irrelevant,
in welcher Reihenfolge Sie diese übergeben, da die Funktion diese automatisch
erkennt und zur Berechnung jeweils richtig nutzt. Der Parameter $format
muss die korrekte Datumsformatierung enthalten, also wie Ihr Datum aufgebaut
ist. Mögliche Werte hierfür sind:
Der letzte Parameter $sep steht für die Trennzeichen Ihrer Datumsangabe. Je
nachdem, ob Sie z. B. ein deutsches oder amerikanisches Datumsformat haben,
kann es mit diesem Parameter eingestellt werden.
Zuerst wird anhand Ihrer Formatierungsangabe (z. B. d.m.Y) herausgefunden
(41-43),
an welcher Stelle (1, 2 oder 3) die einzelnen Buchstaben stehen. Diese
Information benötigen wir später (48, 49), um die korrekten Werte für
GregorianToJD() setzen zu können. Die beiden Datumsangaben werden
dann durch die Trennzeichen ($sep) in einem Array zerlegt (45, 46). Somit
haben wir alle Informationen, um das Datum zu berechnen (48, 49).
Ist das erste Datum größer (51) als das zweite Datum, so ziehen wir das zweite
Datum vom ersten Datum ab (52). War das erste Datum kleiner (53), ziehen
wir das zweite Datum vom ersten Datum ab. Als Rückgabewert wird jeweils
die Menge der Tage geliefert.
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
|
function seDay($begin,$end,$format,$sep){
$pos1 = strpos($format, 'd');
$pos2 = strpos($format, 'm');
$pos3 = strpos($format, 'Y');
$begin = explode($sep,$begin);
$end = explode($sep,$end);
$first = GregorianToJD($end[$pos2],$end[$pos1],$end[$pos3]);
$second = GregorianToJD($begin[$pos2],$begin[$pos1],$begin[$pos3]);
if($first > $second)
return $first - $second;
else
return $second - $first;
} |
Beispiel 2.2: GregorianToJD.php
Dieses Beispiel soll zeigen, wie die Funktion mit deutschen Datumsangaben
aufgerufen wird. Das deutsche Datum wird bekanntlich im Format Tag, Monat,
Jahr aufgebaut und enthält als Trennzeichen den Punkt. $timeA enthält
hier das Geburtsdatum von Wolfgang Amadeus Mozart, hingegen $timeB die
aktuelle Zeit.
64:
65:
66:
67:
68:
|
$timeA = '27.01.1756';
$timeB = date("d.m.Y");
$mozart = seDay($timeA,$timeB,"dmY",".");
echo 'Wolfgang Amadeus Mozart wäre heute ' . $mozart . ' Tage alt'; |
Beispiel 2.3: GregorianToJD.php
Das folgende Beispiel soll zeigen, wie die Funktion mit amerikanischen Datumsangaben
aufgerufen wird. Das amerikanische Datum wird im Format
Monat, Tag, Jahr dargestellt. Als Trennzeichen enthält es einen Bindestrich
oder den Schrägstrich. $timeA enthält hier das das Datum der nächsten totalen
Sonnenfinsternis in Deutschland, $timeB dagegen die aktuelle Zeit.
79:
80:
81:
82:
83:
84: |
$timeA = '09-03-2081';
$timeB = date("m-d-Y");
$sonne = seDay($timeA,$timeB,"mdY","-");
echo 'Die nächste totale Sonnenfinsternis in Deutschland ist in ' . $sonne . ' Tagen'; |
Beispiel 2.4: GregorianToJD.php
Ausgabe im Browser
Wolfgang Amadeus Mozart wäre heute 91354 Tage alt
Die nächste totale Sonnenfinsternis in Deutschland ist in 27570 Tagen |
Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!
Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.
|