PHP date_diff in IF_ELSE anwenden

Rockhound

Lt. Commander
Registriert
Jan. 2003
Beiträge
1.680
Hallo Forum,
ich komm mal wieder nicht drauf und finde auch keinen für mich brauchbaren Hinweis in der PHP-Anleitung und im Internet.

Habe folgenden Code:

PHP:
$z_datum = "2015-01-01"; // Kommt eigentlich aus der Datenband und ist immer anders.
date_default_timezone_set('Europe/Berlin');  
$datetime1 = date_create($z_datum);   
$datetime2 = date_create(null); 
$interval = date_diff($datetime1, $datetime2); 
if ($interval>30) {echo "Mehr wie 30 Tage:".$interval->format('%R%a Tage')."<br>";}
if ($interval>60) {echo "Mehr wie 60 Tage:".$interval->format('%R%a Tage')."<br>";}
if ($interval>90) {echo "Mehr wie 90 Tage:".$interval->format('%R%a Tage')."<br>";}

Das fuunktioniert so leider nicht. Hoffe Ihr versteht was ich vorhabe und könnt mir einen Hinweis geben. Ich weis das ich einen String habe in $interval. Schaffe es diesen aber nicht in einen Integer zu wandeln bzw. diesen beim IF_ELSE richtig zu nutzen.

Gruß
Daniel
 
Dein Problem ist Datediff, da Datediff die Information immer in Jahren, Monaten und Tagen 8usw.) angibt. Also z.B. 0 Jahre, 1 Monat, 6 Tage.

Einfach geht es daher die Differenz in Sekunden zu wählen und diese Sekunden wieder in Tage umzuwandeln

PHP:
<?php    
	$z_datum = "2015-01-01"; // Kommt eigentlich aus der Datenband und ist immer anders.
    date_default_timezone_set('Europe/Berlin');  
    $datetime1 = strtotime($z_datum);   
    $datetime2 = strtotime('2015-03-02'); 
    $sekunden = $datetime1 - $datetime2; 
    $tage = abs(floor($sekunden / 60 / 60 / 24));
    var_dump($sekunden);
    var_dump($tage);
    

   if ($tage > 30) {echo "Mehr wie 30 Tage:".$tage."<br>";}
    elseif ($tage > 60) {echo "Mehr wie 60 Tage:".$tage."<br>";}
    elseif ($tage > 90) {echo "Mehr wie 90 Tage:".$tage."<br>";}
	
?>

Deine If Abfrage finde ich auch etwas "ungünstig". Ggfls. wäre Switch besser.
 
Du musst format() vorher anwenden und dann hast du die Tage als String. (Oder wie im Post über mir die Sekunden in Tage umrechnen.) Das sollte dann funktionieren, nur musst du das andersherum vergleichen (erst 90, dann 60 etc.) und else if verwenden. Und es heißt "mehr als", nicht "mehr wie" ;)

a gibt die komplette Anzahl der Tage zurück, also auch mehr als 31: http://php.net/manual/de/dateinterval.format.php
 
Zuletzt bearbeitet:
Mehr wie 90 Tage:
Oh my.... Das hört sich an wie Kindergartensprache. Wie wäre es mit "Mehr als... Tage" oder "Vor ... Tagen" oder "Seit ... Tagen" oder "Länger als ... Tage". Was wird denn dort berechnet? Wie lange es dauert das Skript zu ändern?

Und ja, solche "geschachtelten if-Abfragen" funktionieren zwar, aber dafür verwendet man besser einen switch ($tage)

Ein Datenband ist auch wohl eher eine Apple Watch, und keine Datenbank.
 
Zuletzt bearbeitet:
Kann switch in PHP denn auch Intervalle? Also 30-59, 60-89 usw.? Ansonsten bleibt nur if else...
 
Naja, wie gesagt, ich hab ka was dort genau gemacht werden soll, oder was gemeint ist, aber so würde ich es ungefähr machen
PHP:
$tage = 59;

$seit = floor($tage / 30);

if ($seit > 1) {
    echo "Seit mehr als " . $seit . " Monaten";
} else {
    echo "Seit mehr als " . $seit . " Monat";
}
Für 59 -> Seit 1 Monat,
61 -> Seit 2 Monaten

Naja vielleicht hilft es Dir ja...
 
Zuletzt bearbeitet:
Nur mal so am Rande bemerkt: Ihr prüft zuerst den kleinsten Schwellenwert (30 Tage), dann den nächst höheren Wert (60 Tage) und zum Schluß die 90 Tage. Sollte das nicht umgekehrt erfolgen, da sonst bei 150 Tagen Differenz dann immer der Text von "Mehr wie 30 Tage" angezeigt wird (Beispiel von tRITON Post #2)?

Im Ursprungscode vom TE wäre, wegen dem fehlenden "else if", die Anzeige bei 150 Tagen Differenz alle 3 Ausgabetexte, d.h. "Mehr wie 30 Tage" + "Mehr wie 60 Tage" + "Mehr wie 90 Tage"

Ansonsten finden ich die Lösung recht gut wenn man die Differenz in Sekunden berechnet und dann auf Tage hoch rechnet....

Grüße Rossibaer
 
Vielen Dank. Hat wunderbar funktioniert.
Der obere Code war nur ein Beispiel den ich schnell zusammengeschustert hatte. Entschuldigt die Rechtschreibfehler und die einfachere Wahl meiner IF-ELSE Beispiele.
 
Magogan schrieb:
Kann switch in PHP denn auch Intervalle? Also 30-59, 60-89 usw.? Ansonsten bleibt nur if else...

Na wenn du vom höchsten zum niedrigsten prüfst gehts mit einem einfachen größer als. Ginge aber auch so:

PHP:
switch(true){
  case ($x > 29 && $x <60):
    //bla
  break;
  case ($x > 59 && $x < 100):
    //bla2
  break;
}
 
Zurück
Oben