<?php
# datediff_ymd() 	= Differenz nach Jahre, Monat und Tage
# tage() 		= Differenz nach absoluten Tagen

/*
https://rotering-net.de/tut/php/datumsdifferenz-in-jahren-monaten-und-tagen.html

 * @author Thorsten Rotering <support@rotering-net.de>
 * @version 1.1 (2016-05-06)
 *
 * Hiermit wird unentgeltlich, jeder Person, die eine Kopie dieses Skripts erhÃ¤lt, die Erlaubnis erteilt,
 * diese uneingeschrÃ¤nkt zu benutzen, inklusive und ohne Ausnahme, dem Recht, sie zu verwenden, zu kopieren,
 * zu Ã¤ndern, zu fusionieren, zu verlegen, zu verbreiten, zu unterlizenzieren und/oder zu verkaufen, und
 * Personen, die dieses Skript erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:
 *
 * Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien des
 * Skripts beizulegen.
 *
 * DAS SKRIPT WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER
 * GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG,
 * JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN
 * ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER
 * ANDERS IM ZUSAMMENHANG MIT DEM SKRIPT ODER SONSTIGER VERWENDUNG DES SKRIPTS ENTSTANDEN.
 */

/*
 * Liefert die Differenz zweier Datumsangaben in Jahren, Monaten und Tagen zurück.
 * @param int $pDate1 Erste Datumsangabe als UNIX-Zeitstempel.
 * @param int $pDate2 (optinal) Zweite Datumsangabe als UNIX-Zeitstempel. Wenn nichts oder 0 angegeben wird, wird
 * das aktuelle Datum verwendet.
 * @param string $pTemplate (optinal) Ein Template-String für die Ausgabe. Dabei wird %d mit der Anzahl der Tage,
 * %m mit der Anzahl der Monate und %y mit der Anzahl der Jahre ersetzt. Wird nichts angegeben, so wird die Vorlage
 * "%y Jahre, %m Monate und %d Tage" verwendet.
 * @return string Die Differenz der Datumsangaben gemÃ¤ÃŸ der Formatierung des Template-Strings.
 */
function datediff_ymd($pDate1, $pDate2 = 0, $pTemplate = '%y Jahre, %m Monate und %d Tage')
{
    /* Wenn $pDate2 nicht gesetzt wurde, auf aktuelles Datum setzen */
    if ($pDate2 == 0) {
        $pDate2 = time();
    }

    /* $pDate1 und $pDate2 vertauschen, wenn $pDate1 grÃ¶ÃŸer als $pDate2 ist */
    if ($pDate1 > $pDate2) {
        $pDate1 ^= $pDate2 ^= $pDate1 ^= $pDate2;
    }

    /* Datumsbestandteile bestimmen */
    $lDay1 = date('d', $pDate1);
    $lMonth1 = date('m', $pDate1);
    $lYear1 = date('Y', $pDate1);

    $lDay2 = date('d', $pDate2);
    $lMonth2 = date('m', $pDate2);
    $lYear2 = date('Y', $pDate2);

    /* Berechne Differenz der Tage */
    $lDays = $lDay2 - $lDay1;

    if ($lDays < 0) {
        $lDays += date('t', $pDate1);
        $lCarry = 1;
    } else {
        $lCarry = 0;
    }

    /* Berechne Differenz der Monate */
    $lMonths = $lMonth2 - $lMonth1 - $lCarry;

    if ($lMonths < 0) {
        $lMonths += 12;
        $lCarry = 1;
    } else {
        $lCarry = 0;
    }

    /* Berechne Differenz der Jahre */
    $lYears = $lYear2 - $lYear1 - $lCarry;

    /* Ausgabestring anhand des Template-Strings erzeugen und zurückgeben */
    return str_replace(array('%y', '%m', '%d'), array($lYears, $lMonths, $lDays), $pTemplate);
}

  function tage($start, $ende) {
  $startDate = new DateTime($start);
  $endDate = new DateTime($ende);
  $diff = $startDate->diff($endDate);
  
  $tage = $diff->days;

  return $tage+1;
}
  
/*
$datum1 = '2019-01-01';
$datum2 = '2019-06-30';

$year_start = substr($datum1,0,4);
$mon_start = substr($datum1,5,2);
$day_start = substr($datum1,8,2);

$year_ende = substr($datum2,0,4);
$mon_ende = substr($datum2,5,2);
$day_ende = substr($datum2,8,2);

$start =  mktime(0, 0, 0, $mon_start, $day_start, $year_start);
$ende =  mktime(0, 0, 0, $mon_ende, $day_ende+1, $year_ende);

echo datediff_ymd($start, $ende);

echo "<hr>";


echo tage($datum1, $datum2);
*/
?>
