dividierte timestamps liefern überraschendes Ergebnis

Ja schon hela.
Hab ich falsch formuliert. Klar ist das per se ein Integer ;), aber in meiner Schleife dann irgendwie doch nicht mehr. Wahrscheinlich weil da das Ergebnis da ja mit der Variable $lenghDay = 86400; verrechnet wird. und da stolpert das Skript dann wieder über die Zeitumstellung.

Ich könnt natürlich auch alles umstricken und dann via modulo prüfen ob Start- und Enddatum ins Intervall passen, aber so wie es ist gehts ja auch, und ich kann da jetzt nicht mehr Zeit investieren.
 
... Klar ist das per se ein Integer ;), aber in meiner Schleife dann irgendwie doch nicht mehr. Wahrscheinlich weil da das Ergebnis da ja mit der Variable $lenghDay = 86400; verrechnet wird. und da stolpert das Skript dann wieder über die Zeitumstellung...
Ja klar, das ist natürlich Schwachfug. Wenn man gleich mit ganzen Tagen rechnet, dann muss man nichts mehr mit 86400 verrechnen:
PHP:
echo "<h1>Ausgabe zyklisch</h1>";

$terminStart = strtotime("2013-8-1 00:00:00");
$terminEnde  = strtotime("2013-8-8 00:00:00");

/*********************************************/

$jdStart = unixtojd($terminStart);
$jdEnde = unixtojd($terminEnde);

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

//Anzahl der Tage zwischen den Terminen ermitteln
$anzahlTage = ($jdEnde - $jdStart) / $interval;
echo ($anzahlTage+1)."<br>";


if(is_int($anzahlTage))
{
  echo "Im gewählten Zeitraum liegen ".($anzahlTage+1)." Termine.<br>";

  //Ausgabe der einzelnen Termine
  $myDate = $jdStart;
  for($i=0; $i < $anzahlTage+1; $i++){
    echo "mein ".($i+1).". Termin: ";
    echo date("d.m.Y", jdtounix($myDate))."<br>";
    $myDate = $myDate + $interval;
  }
}else{
  echo "Startdatum des letzten Termins passt nicht zum gewählten Zyklus";
}
 
Vielen Dank hela.
So kann ich auch viel leichter die Länge eines jeden Zeitintervalls dazubasteln.
Ich hab die Variablen noch mal umbenannt, da Start und Enddatum hier nicht mehr passt.
Es wird das Startdatum des ersten und des letzten Intervalls angegeben.

Hier der fertige Code:
PHP:
echo "<h1>Ausgabe zyklisch</h1>";
echo "<h2>mit Länge pro Interval</h2>";

$terminStartFirst = strtotime("2013-3-29 00:00:00"); 
$terminStartLast  = strtotime("2013-4-12 00:00:00"); 

/*********************************************/ 

$jdStartFirst = unixtojd($terminStartFirst); 
$jdStartLast = unixtojd($terminStartLast); 

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

//Anzahl der Tage zwischen den Terminen ermitteln 
$anzahlTage = ($jdStartLast - $jdStartFirst) / $interval; 
echo ($anzahlTage+1)."<br>"; 


if(is_int($anzahlTage)) 
{ 
  echo "Im gewählten Zeitraum liegen ".($anzahlTage+1)." Termine.<br>"; 

  //Ausgabe der einzelnen Termine 
  $myDate = $jdStartFirst; 
  for($i=0; $i < $anzahlTage+1; $i++){ 
    echo "mein ".($i+1).". Termin:<br>";
	for($ii=0; $ii < $laenge; $ii++){
		$myDateSequenz = date("d.m.Y", jdtounix($myDate+$ii));
		echo $myDateSequenz."<br>";
		}
    $myDate = $myDate + $interval;
	echo "<br>";
  } 
}else{ 
  echo "Startdatum des letzten Termins passt nicht zum gewählten Zyklus"; 
}
 
Abgesehen von den nachfolgenden Diskussionen - man hätte einfach nur auf Int kaufmännisch runden sollen, da der "Fehlbetrag" eh nur eine Winzigkeit ist. round(35.95) wäre genauso ok. Es ist eine Sache, dem Problem auf die Schliche zu kommen, die andere, es sinnvoll "unter der Haube" zu lösen :D

mfg chmee
 
Hallo spelmann,
das if-else-Statement brauchst du nun nicht mehr, da die Variable $anzahlTage nun nichts anderes als einen INTEGER-Wert enthält.

... Es ist eine Sache, dem Problem auf die Schliche zu kommen, die andere, es sinnvoll "unter der Haube" zu lösen :D
Wow, sollte in Goldbuchstaben gesetzt und eingerahmt werden - echt.
 
Zurück