Datum berechnen  nach oben

Das heutige Datum ermittelt man mit date(). Beispiel:

echo date("d.m.Y");

Intern wird das Datum als Zahl behandelt. Um es für uns Menschen verständlich zu machen, muss es formatiert werden. In unserem Beispiel ist "d.m.Y" das Format. Die date-Funktion stellt dazu eine vielzahl von Buchstaben zur Verfügung, die jeweils durch einen bestimmten Datumswert ersetzt werden. So können z.B. einzeln das Jahr, der Monat, der Tag, die Stunde usw. ermittelt werden:

echo "Jahr: ".date("Y")."<br>";
echo "Monat: ".date("m")."<br>";
echo "Tag: ".date("d")."<br>";
echo "Stunde: ".date("H")."<br>";
echo "Minute: ".date("i")."<br>";
echo "Sekunde: ".date("s")."<br>";

In der beschriebenen Form (ohne weiteres Argument) nimmt die Funktion date() immer das aktuelle Datum an. Wenn ein anderes Datum verwendet werden soll, muss dieses als zweites Argument angegeben werden:

echo date("d.m.Y H:i",  1141081200); 
// entspricht 28.02.2006 00:00

Die Zahl 1141081200 ist der Timestamp-Wert des Datums und der Zeit. In der Praxis lässt sich so aber nicht arbeiten, da sich der Timestamp doch recht schwer herleiten lässt. Abhilfe schafft hier die Funktion mktime(), sie wandelt die Zahlen für Tag, Monat, Jahr usw. in einen Timestamp um:

echo date('Y-m-d H:i:s,mktime(12,13,14,2,28,2006)); 
// = 2006-02-28 12:13:14

Wie im Beispiel zu sehen, wird der mktime-Funktion die Stunde, die Minute, die Sekunde, der Monat, der Tag und das Jahr übergeben (in dieser Reihenfolge) um daraus den entsprechenden Timestamp zu berechnen, der wiederum von date() und anderen Funktionen verwendet werden kann.

Bestimmte Tage berechnen  nach oben

Neben der Berechnung des Timestamps für ein Datum, kann die mktime-Funktion aber noch mehr. Mit Ihr lassen sich auch Berechnungen anstellen. Beispiel:

$j = date('Y');
$m = date('m');
$d = date('d');
$morgen = date('d.m.Y',mktime(0,0,0,$m,$d+1,$j));
$gestern = date('d.m.Y',mktime(0,0,0,$m,$d-1,$j));
$monatserster = date('d.m.Y',mktime(0,0,0,$m,1,$j));
$monatsletzter = date('d.m.Y',mktime(0,0,0,$m+1,0,$j));

Wie im Beispiel zu sehen, lässt sich einfach zum jeweiligen Datum ein Tag, Monat oder Jahr hinzuaddieren um damit auf ein neues Datum zu kommen. Die mktime-Funktion beherrscht dabei auch Zahlen die nicht dem korrekten Datumsformat entsprechen. Wird also als Wert für den Tag die 32 angegeben, so rechnet mktime dies automatisch auf den nächsten Monat um (also 01 bei 31 Tagen, bzw. 02. Bei Monaten mit 30 Tagen). Zu beachten ist hierbei, dass die 0 rechnerisch der -1 entspricht. Wie in der letzten Zeile des Beispiels zu sehen wird hier gerechnet: Aktueller Monat plus 1, plus Tag 0 (einen zurück), ergibt den letzten des aktuellen Monats.
Auf diese Weise lassen sich alle Tage berechnen oder es lässt sich zählen:

$heute = time();
echo 'Die nächsten 30 Tage:<br>';
for($i=0; $i<31; $i++)
{
 echo date('d.m.Y',mktime(0,0,0, date('m',$heute), 
           date('d',$heute)+$i, date('Y',$heute)));
 echo '<br>';
}

Zeitdifferenzen berechnen  nach oben

Soll eine Zeitdifferenz berechnet werden, verwendet man dazu üblicherweise den Timestamp zur Berechnung. Da der Timestamp die Zahl der Sekunden des Datums ab dem 01.01.1970 00:00 Uhr ist, besitzen also alle Datumswerte die gleiche Basis und lassen sich somit miteinander vergleichen ohne, dass auf Schaltjahre, Monatslängen oder dergleichen geachtet werden muss. Beispiel:

$heute = mktime();
$jahr2010 = mktime(0,0,0,1,1,2010);
echo 'Noch '.round(($jahr2010-$heute) / (3600*24),0).
     ' Tage bis 2010';

Im Beispiel wird das Datum vom 01.01.2010 das aktuelle Datum abgezogen. Ergebnis ist also die Sekundendifferenz der zwei Daten. Um aus den Sekunden nun die Anzahl der Tage zu berechnen, dividiert man einfach Sekunden und Stunden (60 *60 = 3600) und schließlich den Tag (24 Stunden).