Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++



:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Tage zwischen zwei Datumsangaben ermitteln


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:

  • d Tag
  • m Monat
  • Y Jahr

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.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


Microsoft Deutschland GmbH
twosteps.net - ...Premium-Webhosting
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2009 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt