So.. ich hab’s geschafft…
Ich habe eine Funktion geschrieben die die Zeit seit Cristuns in Sekunden berechnet, dabei jedes Schaltjahr berücksichtigt.
Dazu eine Zweite die diese Zahl wieder umrechnen kann und in einer Ansprechenden Formatierung wieder sichtbar macht.
Ziel ist der Zeitstempel für den Eintag in einer Datenbank um auch damit zuverlässig rechnen zu können.
Die Funktion ist zusätzlich so gestaltet das man den Zeitstempel nach vorn oder zurückdatieren kann. So kann man Zielzeiten definieren.
Ich weiß das mir sehr oft vorgehalten wird das ich das Farad neu erfinde aber ich mach’s trotzdem, hab leider nichts gefunden was mir in der Art zusagen würde… Schaut euch das mal an und für Kritik bin ich zu haben…
Danke
<?php
print 'Zeitstempel: '.co_time_st(0,0,0,0,0);
print '<br>';
print 'Rückrechnung: '.co_time_ba(co_time_st(0,0,0,0,0));
/*
Ein Jahr ist ein Schaltjahr, wenn die Jahreszahl durch 4, aber nicht 100 teilbar ist (oder umgekehrt).
Ist das Jahr durch 400 teilbar, handelt es sich ebenfalls um ein Schaltjahr.
*/
// co_time_st(0,0,0,0,0) +Sekunden,+Minuten,+Stunden,+Tage,+Jahre
function co_time_st($tmp_pluss_s,$tmp_pluss_i,$tmp_pluss_G,$tmp_pluss_z,$tmp_pluss_Y)
{
$schalt = (date('Y')-date('Y')%4)/4; // jedes 4te Jahr
$schalt2 = (date('Y')-date('Y')%100)/100; // jedes 100te Jahr
$schalt3 = (date('Y')-date('Y')%400)/400; // jedes 400te Jahr
$schalttotal=$schalt-$schalt2+$schalt3;
$tmp_totaltime=
((date('s')+$tmp_pluss_s))+
((date('i')+$tmp_pluss_i)*60)+
((date('G')+$tmp_pluss_G)*60*60)+
((date('z')+$tmp_pluss_z+$schalttotal)*24*60*60)+
((date('Y')+$tmp_pluss_Y)*60*60*24*365)+$tmp_pluss;
return $tmp_totaltime;
}
function co_time_ba($zeit_stempel)
{
$schalt = (date('Y')-date('Y')%4)/4; // jedes 4te Jahr
$schalt2 = (date('Y')-date('Y')%100)/100; // jedes 100te Jahr
$schalt3 = (date('Y')-date('Y')%400)/400; // jedes 400te Jahr
$schalttotal=$schalt-$schalt2+$schalt3;
$zeit_stempel;
$tmp_jahreszeit_in_sek = (1*365*24*60*60);
$Jahr = (int) (($zeit_stempel-($schalttotal*24*60*60)) / $tmp_jahreszeit_in_sek);
$tmp_zwischenzeit = $zeit_stempel-($Jahr*$tmp_jahreszeit_in_sek+($schalttotal*24*60*60));
$Tage =1 + (int) ($tmp_zwischenzeit / (24*60*60));
$M1=31;
if(($Jahr %4)==0 and ($Jahr %100)<>0 and ($Jahr %400)==0)
{ $M2=29; } else { $M2=28; }
$M3=31; $M4=30; $M5=31; $M6=30; $M7=31; $M8=31; $M9=30; $M10=31; $M11=30; $M12=31;
if($Tage <= $M1)
{$Monat = 1;}
else if ($Tage <= ($M1+$M2))
{$Monat = 2;$Tage2 = $Tage - $M1;}
else if ($Tage <= ($M1+$M2+$M3))
{$Monat = 3; $Tage2 = $Tage - $M1-$M2;}
else if ($Tage <= ($M1+$M2+$M3+$M4))
{$Monat = 4; $Tage2 = $Tage - $M1-$M2-$M3;}
else if ($Tage <= ($M1+$M2+$M3+$M4+$M5))
{$Monat = 5; $Tage2 = $Tage - $M1-$M2-$M3-$M4;}
else if ($Tage <= ($M1+$M2+$M3+$M4+$M5+$M6))
{$Monat = 6; $Tage2 = $Tage - $M1-$M2-$M3-$M4-$M5;}
else if ($Tage <= ($M1+$M2+$M3+$M4+$M5+$M6+$M7))
{$Monat = 7; $Tage2 = $Tage - $M1-$M2-$M3-$M4-$M5-$M6;}
else if ($Tage <= ($M1+$M2+$M3+$M4+$M5+$M6+$M7+$M8))
{$Monat = 8; $Tage2 = $Tage - $M1-$M2-$M3-$M4-$M5-$M6-$M7;}
else if ($Tage <= ($M1+$M2+$M3+$M4+$M5+$M6+$M7+$M8+$M9))
{$Monat = 9; $Tage2 = $Tage - $M1-$M2-$M3-$M4-$M5-$M6-$M7-$M8 ;}
else if ($Tage <= ($M1+$M2+$M3+$M4+$M5+$M6+$M7+$M8+$M9+$M10))
{$Monat = 10;$Tage2 = $Tage - $M1-$M2-$M3-$M4-$M5-$M6-$M7-$M8-$M9;}
else if ($Tage <= ($M1+$M2+$M3+$M4+$M5+$M6+$M7+$M8+$M9+$M10+$M11))
{$Monat = 11;$Tage2 = $Tage - $M1-$M2-$M3-$M4-$M5-$M6-$M7-$M8-$M9-$M10;}
else if ($Tage <= ($M1+$M2+$M3+$M4+$M5+$M6+$M7+$M8+$M9+$M10+$M11+$M12))
{$Monat = 12;$Tage2 = $Tage - $M1-$M2-$M3-$M4-$M5-$M6-$M7-$M8-$M9-$M10-$M11;}
$tmp_zwischenzeit2 = $tmp_zwischenzeit - (($Tage-1)*24*60*60);
$Stunden = (int) ($tmp_zwischenzeit2 / (60*60));
$tmp_zwischenzeit3 = $tmp_zwischenzeit2 - $Stunden*60*60;
$Minuten = (int) ($tmp_zwischenzeit3 / 60);
$tmp_zwischenzeit4 = $tmp_zwischenzeit3 - $Minuten * 60;
$Sekunden = (int) $tmp_zwischenzeit4;
return $Tage2.'.'.$Monat.'.'.$Jahr.' '.$Stunden.':'.$Minuten.':'.$Sekunden ;
}
?>
Sicher kann man das eine Oder ander auch noch verkürzen und zugegeben ich hab etwas mit Variablen um mich geworfen.... aber so kann man das denke ich zur Ansicht erstmal überblicken