deputat/func_timediff.php
2023-04-25 13:25:59 +02:00

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);
*/
?>