fastix®: Jahre Tage zwischen Datum

Beitrag lesen

Moin!

Die Sache ist eigentlich ganz einfach, wenn man bedenkt, dass date('z') den Tag des Jahres (1.1.=0) zurückgibt. Ob es sich um ein Schaltjahr handelt verrät date('L'). Im gleichen Jahr braucht es nicht zu interessieren, weil date('z') korrekte Werte liefert. Ligen die Datumsangaben in verschiedenen Jahren muss nur untersucht werden ob das Vorjahr ein Schaltjahr ist. Da man aber dessen Tageszahl ohnehin braucht bietet sich die Lösung an, dass man diese Tageszahl direkt errechnet.

<?php  
error_reporting(E_ALL);  
  
function getTimeFromIsoDatum($str) {  
  # Achtung: ohne Absicherung!  
  # gibt time-string für Iso-Datum (jeweils 00:00 Uhr zurück;  
  # (YYYY-MM-DD)  
  $ar=explode('-',$str);  
  return mktime(0, 0, 0, $ar[1], $ar[2], $ar[0]);  
}  
  
# Wir brauchen für date() die Zeitpunkte:  
$datum1=getTimeFromIsoDatum('2003-02-28');  
$datum2=getTimeFromIsoDatum('2005-03-01');  
  
  
# Tauschen der Datumsangaben, falls Reihenfolge falsch:  
if ($datum1 > $datum2) {  
   $tmp=$datum1;  
   $datum1=$datum2;  
   $datum2=$datum1;  
}  
  
  
$Jahr1=date('Y', $datum1);  
$Jahr2=date('Y', $datum2);  
$Tage1=date('z', $datum1); # Liefert den Tag des Jahres  
$Tage2=date('z', $datum2); # Liefert den Tag des Jahres  
  
  
# Hier gibt es nichts zu tun.  
if ($Tage2 >= $Tage1) {  
  die ("Differenz: ".($Jahr2-$Jahr1)." Jahre und ".($Tage2-$Tage1)." Tag[e]\n");  
}  
  
# else  
# Wenn der 2. Tag früher im Jahr liegt, dann ist von der Differenz der reinen Jahreszahlen 1 abzuziehen:  
$diffJahre=$Jahr2-$Jahr1-1;  
  
# Wenn diese Differenz 0 ist, dann liegen die Zeitpunkte im gleichen Jahr und es gibt nichts zu tun:  
if (0 == $diffJahre) {  
  die ("Differenz: ".($Tage2-$Tage1)." Tag[e]\n");  
}  
  
# else  
# Wir brauchen mal eben das Vorjahr und die Anzahl von dessen Tagen  
$VorJahr=$Jahr2-1;  
$TageVorjahr=365+date('L',mktime(0,0,0,1,1,$VorJahr)); # date('L') liefert 1 für Schaltjahr, sonst 0  
  
# Davon ziehen wir die Tage bis zum Datum1 ab und rechnen die Tage von Datum2 hinzu:  
$Tage=$TageVorjahr-$Tage1+$Tage2;  
  
die ("Differenz: ".$diffJahre." Jahre und ".$Tage." Tag[e]\n");  
  
?>

MFFG (Mit freundlich- friedfertigem Grinsen)

fastix