tutorials.de Buch-Aktion 05/2012
  • PHP: Differenz zu Datum in Tagen berechnen

    Manchmal ist es erforderlich, in PHP die Differenz zwischen zwei Zeitpunkten zu berechnen.
    Klassisches Beispiel: Wir wollen ermitteln wie lange ein bestimmtes Datum her ist, hier der 18.05.2011. Die Differenz soll in Tagen ausgegeben werden.

    Da PHP nicht direkt mit dem deutschen Datumsformat zurecht kommt, muss zunächst mittels mktime ein Timestamp aus unseren Variablen erzeugt werden.
    Die Funktion date liefert (wenn kein zusätzlicher Parameter angegeben) das aktuelle Datum. Wir lesen hier nur Monat, Tag und Jahr aus, damit wir nach der Berechnung nur ganze Tage bekommen und keine krummen Werte.

    Mit den beiden Timestamps kann man nun wunderbar rechnen. Um das Resultat in Tagen auszugeben, teilt man einfach noch durch 86400 Sekunden (= 1 Tag).

    PHP-Code:
    <?php
    // Hier wird das Referenzdatum definiert
    $monat '05';
    $tag '18';
    $jahr '2011';

    //mktime macht aus dem Referzdatum und dem aktuellen Datum einen Timestamp, damit kann dann die Differenz berechnet werden
    $tage = (int)((mktime(000,$monat$tag$jahr) - mktime(000date("m"), date("d"), date("Y"))) / 86400);
    if (
    $tage == 1) {
      echo 
    "1 Tag";
      }
      else if (
    $tage == -1) {
      echo 
    "-1 Tag";
      }
      else {
      echo 
    "".$tage." Tage";
      }
    ?>
     


    Kommentare 2 Kommentare
    1. Avatar von hela
      hela -
      Hallo, ich möchte dazu noch folgendes ergänzen:

      Wenn es um die Berechnung einer Tagesdifferenz (ohne Stunden, Minuten und Sekunden) geht, dann kann man die gleiche Rechnung auch mit Hilfe des Julianischen Tages durchführen. Die PHP-Kalenderfunktionen bieten dazu verschiedene Konvertierungsmöglichkeiten.

      PHP-Code:
      // Referenzdatum:
      $monat 05
      $tag 18
      $jahr 2011;

      // Ref.-Datum als Jul.Tag:
      $refTag_jd gregoriantojd($monat$tag$jahr);

      // aktuelles Serverdatum als Jul.Tag:
      $heute_jd unixtojd();

      echo 
      'Zeitspanne in Tagen: '.($refTag_jd $heute_jd); 
    1. Avatar von bn
      bn -
      Ab PHP 5.3 bringt PHP mit der Libary Datetime eine längst überfällige Diff-Methode ins Rennen.

      Beispiel aus der PHP-Doku
      PHP-Code:
      $datetime1 = new DateTime('2009-10-11');
      $datetime2 = new DateTime('2009-10-13');
      $interval $datetime1->diff($datetime2);
      echo 
      $interval->format('%R%a days'); 
      Einfacher gehts nun wirklich nicht. Übrigens empfinde ich das Gehample mit mktime als zu umtändlich. Praktikabler und besser lesbar ist in meinem Augen dann doch strtotime. Der Vorteil entsteht insbesondere dann, wenn die Date- und Datetime Werte aus der Datenbank (Date, Datetime, Timestamp, etc.) ausgelesen werden.

      PHP-Code:
      $timestamp strtotime ("2011-06-09");
      // ... entspricht ...
      $timestamp mktime (000692011); 
      Grüße BN
    Kommentare Kommentar schreiben

    Klicke hier, um dich anzumelden

    Wie heißt die Bundeskanzlerin der BRD mit Nachnamen? Angela...