117 lines
3.9 KiB
PHP
Executable File
117 lines
3.9 KiB
PHP
Executable File
<?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);
|
|
*/
|
|
?>
|