Teil von  SELFPHP
Professional CronJob-Service

Suche

:: Anbieterverzeichnis ::

Globale Branchen

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

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP?
In über 130.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

Am Ende der Seite finden Sie das komplette Beispiel als Download.

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.




 

Download

Info   ZIP BZIP2 TARGZ
Größe   1.49 Kilobyte 1.66 Kilobyte 1.57 Kilobyte

Alle Beispiele als PHP-Datei(en)

Hier haben Sie die Möglichkeit, sich sämtliche auf dieser Seite gezeigten Beispiele als PHP-Dateien direkt downzuloaden.

Umständliches Copy & Paste ist daher nicht mehr notwendig, da alle Beispiele sofort ausprobiert werden können.

Sie haben bei der Auswahl der bereitgestellten Downloads mehrere Möglichkeiten, je nachdem welches Komprimierungsverfahren Sie bevorzugen.

Zurück zur Übersichtsseite


 




:: Premium-Partner ::

Webhosting/Serverlösungen

MECO Systemhaus GmbH & Co. KG weitere Premium-Partner
 

:: SELFPHP Sponsor ::

Kaspersky Labs GmbH weitere Sponsoren
 


:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Webhosting/Serverlösungen

Suchen Sie den für Sie passenden IT-Dienstleister für Ihr Webhosting-Paket oder Ihre Serverlösung?

Sie sind nur ein paar Klicks davon entfernt!


 

Ausgewählter Tipp im Bereich PHP-Skripte


Zyklische Redundanzprüfung (CRC)

Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte
 

SELFPHP Code Snippet


Alle Dateien mit bestimmter Dateierweiterung auflisten (PHP 5)

Weitere interessante Code Snippets finden Sie auf SELFPHP im Bereich PHP Code Snippets
 
© 2001-2016 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt
© 2005-2016 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de