Meowsalot: Tage berechnen

Guten Morgen,

ich verstehe eines nicht

$end->modify( '+0 day' );

oder

$end->modify( '+1 day' );

In einigen Tutorials lese ich um genau ein Datum zu berechnen muss ich +0 bzw. +1 hinzurechnen. Was ist denn jetzt genau richtig?

Gehen wir mal von folgender Rechnung aus: 01.01.2018 - 15.03.2018 sind 53 Arbeitstage laut http://www.arbeitstage.de wenn man den 01.01.2018 abzieht, denn dieses war ein Feiertag.

$begin = new DateTime( $_SESSION['von'] );
$end = new DateTime( $_SESSION['bis'] );
$end = $end->modify( '+0 day' ); 

$diff = $begin->diff($end);

$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);

$i = 1;
$Feiertage = 1; // 01.01.2018

foreach($daterange as $date){
    
	$datum = strtotime($date->format("Y-m-d"));
	$d = date("l", $datum);
			
	if ($d != "Saturday" && $d != "Sunday" ) {
		$i++;
}

Die Ausgabe lautet dann

// 53 Tage
<?php echo $i-$Feiertage ?>

Wenn ich es mit +1 day ausführe

$begin = new DateTime( $_SESSION['von'] );
$end = new DateTime( $_SESSION['bis'] );
$end = $end->modify( '+1 day' ); 

$diff = $begin->diff($end);

$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);

$i = 1;
$Feiertage = 1; // 01.01.2018

foreach($daterange as $date){
    
	$datum = strtotime($date->format("Y-m-d"));
	$d = date("l", $datum);
			
	if ($d != "Saturday" && $d != "Sunday" ) {
		$i++;
}

erhalte ich

// 54 Tage
<?php echo $i-$Feiertage ?>

Daher meine Frage, was hat das +1 day auf sich bzw. wann wird/muss es benutzt werden? So hatte ich bis jetzt eine verfälschte Ausgabe.

Bis bald! Meowsalot (Bernd)

  1. Tach!

    ich verstehe eines nicht

    $end->modify( '+0 day' );
    

    oder

    $end->modify( '+1 day' );
    

    In einigen Tutorials lese ich um genau ein Datum zu berechnen muss ich +0 bzw. +1 hinzurechnen. Was ist denn jetzt genau richtig?

    Bei einem +0 day ändert sich bei mir überhaupt nichts an dem Wert. "um genau ein Datum zu berechnen" ist mir auch zu nichtssagend, um daraus zu entnehmen, was der Sinn sein könnte. So einen Hinweis habe ich auch noch nicht gesehen. Was ist denn das Problem, das damit repariert werden soll?

    Gehen wir mal von folgender Rechnung aus: 01.01.2018 - 15.03.2018 sind 53 Arbeitstage laut http://www.arbeitstage.de wenn man den 01.01.2018 abzieht, denn dieses war ein Feiertag.

    Die Rechnung (und dein Code dazu) berücksichtigt aber nicht, dass die Feiertage auch auf ein Wochenende fallen können und dann nicht nochmal extra abgezogen werden dürfen.

    Daher meine Frage, was hat das +1 day auf sich bzw. wann wird/muss es benutzt werden?

    Das fügt genau einen Tag zum gegebenen Datum und Uhrzeit, inklusive Berücksichtigung von Sommerzeitumschaltungen.

    Die Frage in deinem Fall wird wohl sein, ob das Endedatum bei Zeiträumen inklusive oder exklusive sein soll. Das ist analog zur Frage, ob das Intervall von 2 bis 3 nun eine Größe von 1 (3-2=1) oder 2 zwei haben soll (2 und 3 = 2 Werte). Wenn du letzteres haben möchtest, kannst du zum einfachen Rechnen den nächsthöheren Wert als Ende setzen (3+1)-2 = 2.

    dedlfix.