Teil von  SELFPHP
Letztes Update: 14.09.2007 09:07:01

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

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


 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt