dividierte timestamps liefern überraschendes Ergebnis

Spelmann

Erfahrenes Mitglied
Hallo,
ich verrenk mir gerade das Hirn.
Folgender Code gibt wie zu erwarten eine Ganzzahl als Ergebnis:
PHP:
//Ein Intervall von Samstag bis Samstag
$terminStart = strtotime("2013-01-05 00:00:00"); 
$terminEnde =   strtotime("2013-03-30 00:00:00");
$anzahlTage = (($terminEnde)-$terminStart)/86400;
echo ($anzahlTage+1);

//Ergebnis: 85

Dieses Intervall liefert aber keine Ganzzahl:
PHP:
//Noch ein Intervall von Samstag bis Samstag
$terminStart = strtotime("2013-03-02 00:00:00"); 
$terminEnde =   strtotime("2013-04-06 00:00:00");
$anzahlTage = (($terminEnde)-$terminStart)/86400;
echo ($anzahlTage+1);

//Ergebnis: 35.958333333333

Kann mir jemand erklären, warum das so ist?
Vielen Dank!
 
Ist da vielleicht der Wechsel von Winter nach Sommerzeit drin? Somit fehlt einem Tag eine Stunde, dieser Tag hat nur 82800 Sekunden (addiere mal in diesem Fall 3600 hinzu)
PHP:
$anzahlTage = (($terminEnde)-$terminStart+3600)/86400;

Ansonsten, herausfinden, ob die Zeitumstellung in dem Zeitraum liegt und dann hinzufügen, abziehen oder gar nichts tun.

mfg chmee
 
Du bist der Größte!!
Da wär ich erst in Tagen drauf gekommen, aber klar.
Ich weiß zwar noch nicht, wie ich das jetzt in meine Abfrage fingere, aber ich hab zumindest mal wieder einen Ansatz.

Vielen Dank!
 
@alxy
Wenn ich mir solche Skripte bastel, mag ich es nicht immer, von den aktuellsten PHP Versionen abhängig zu sein.

@hela
sieht erstmal elegant aus, funktioniert aber nicht wie erwartet. unixtojd($terminStart) ergibt in meiner Rechnung auch wieder keine integer Werte.

Mit dem ersten Anstoß von chmee komme ich am besten zurecht. Verdient vielleicht keinen Schönheitspreis, macht aber soweit erstmal was es soll:

PHP:
echo "<h1>Ausgabe zyklisch</h1>";
$lenghDay = 86400;
$terminStart = strtotime("2013-8-1 00:00:00"); 
$terminEnde =   strtotime("2013-8-8 00:00:00");

//Prüfung, ob terminEnde in der Sommerzeit liegt während terminStart noch Winterzeit hat
if(date('I', $terminEnde) == 1 AND date('I', $terminStart) != 1){ 
    $wechsel -= 3600; 
}  
//Umgekehrte Prüfung, ob terminEnde in der Winterzeit liegt während terminStart noch Sommerzeit hat
if(date('I', $terminEnde) != 1 AND date('I', $terminStart) == 1){ 
    $wechsel += 3600; 
}  

$interval = 7; //Täglich =1, wöchentlich =7, 2 wöchentlich=14



//Anzahl der Tage zwischen den Terminen ermitteln
$anzahlTage = (($terminEnde-$wechsel)-$terminStart)/($lenghDay*$interval);
echo ($anzahlTage+1)."<br>";



if(is_int($anzahlTage)){
	echo "Im gewählten Zeitraum liegen ".($anzahlTage+1)." Termine.<br>";
	
	//Ausgabe der einzelnen Termine
	$myDate = $terminStart;
	for($i=0; $i < $anzahlTage+1; $i++){
		echo "mein ".($i+1).". Termin: ";
		echo date("d.m.Y", $myDate)."<br>";
		$myDate = $myDate+($interval*$lenghDay);
		}
	}else{
	echo "Startdatum des letzten Termins passt nicht zum gewählten Zyklus";
}

Vielen Dank für eure Denkanstösse!
 
@alxy
Wenn ich mir solche Skripte bastel, mag ich es nicht immer, von den aktuellsten PHP Versionen abhängig zu sein.
Kommt drauf an ob du ein Script erstellen willst, das jeder brauchen kann oder ob du die Zielumgebung kennst.
Im Zweiten Fall würde ich immer auf die Version gehen die dort vorhanden ist.

Wer jetzt noch mit PHP < 5.3 unterwegs ist sollte dringenst mit deinem Provider reden, denn die Version 5.3 ist seitbald 4 Jahren verfügbar (2009-06-30).
 
Zurück