PHP Trick: Alter einer Person professionell berechnen mit Wochenangabe

Hallo,

Kalenderberechnungen sind nicht immer einfach. Oft wünscht man sich ausführlichere Angaben, als die der vorhandenen PHP-Funktionen. Seit PHP 5.3 ist damit aber Schluss.

Die neue Klasse „DateTime“ erlaubt es uns, Datenobjekte zu erstellen und schafft für Differenzberechnungen mit der neuen Methode diff($datum) endlich Abhilfe.

Um professionell mit Datums- und Zeitangaben zu rechnen, müssen wir nur noch die DateTime Objekte erzeugen und können uns gleich aufs Wesentliche konzentrieren.

Das erste Datum ist gegeben und das zweite Objekt soll das Aktuelle Datum enthalten, wozu wir einfach die altbekannte Funktion date($format) benutzen
Los gehts:

 

<?php 

//Wenn wir mit date() arbeiten, müssen wir eine TimeZone angeben
date_default_timezone_set("Europe/Berlin");

//Datentime Objekte erzeugen (Jahr-Monat-Tag)
$datum1 = new DateTime('2009-10-11'); //Geburtsdatum
$datum2 = new DateTime(date('Y')+'-'+date('m')+'-'+date('d')); //Aktuelles Datum

$interval = $datum2->diff($datum1);
//Das Ergebnis wird formatiert. %Y gibt die Jahre an (4stellig) %m die Monate und %d die Tage
//Wenn wir die Tage durch 7 teilen und abrunden, erhalten wir die Anzahl der Wochen
$wochen = floor($interval->format('%d') / 7);

//Die restlichen Tage, die nicht mehr eine ganze Woche bilden können (<7) sollen ebenfalls angezeigt werden
$tage = ($interval->format('%d') % 7);

//Output
echo $interval->format("%Y Jahre %m Monate $wochen Wochen $tage Tage");
?>

 

Die Klasse ist wirklich hilfreich, wenn man bedenkt, dass man vorher entweder alles in Timestamps und zurück rechnen musste oder komplexe Rechnungen mit den Monats-, Tages- und Jahresangaben durchführen musste.

Viel Spaß damit! 🙂

Bild: Thomas Max Müller (pixelio)

2 Gedanken zu „PHP Trick: Alter einer Person professionell berechnen mit Wochenangabe

  • 27 August, 2015 um 20:44
    Permalink

    Danke für den Tipp. Ich würde dir aber empfehlen ‚date()‘ nicht zu verwenden, wenn schon objektorientiert, dann richtig:

    $date = new DateTime($datum);
    $datumStamp = $date->getTimestamp();
    $datum = gregoriantojd($date->format(‚m‘), $date->format(‚d‘), $date->format(‚Y‘);

    Das Objekt liefert alles was man braucht und hat kein Beschränkung auf 1901-2038.

    The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer). However, before PHP 5.1.0 this range was limited from 01-01-1970 to 19-01-2038 on some systems (e.g. Windows).

    Antworten
    • 10 September, 2015 um 10:10
      Permalink

      Hallo Roman,

      Du hast Recht. Die objektorientierte Lösung ist eleganter! Vielen Dank für dein Feedback und den Tipp.

      Beste Grüße
      Max

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.