Blame | Last modification | View Log | RSS feed
<?php
function GetStrEinheit($einheit, $short=true) {
switch ($einheit) {
case 1:
if ($short)
$sein = "S";
else
$sein = "Stunde";
break;
case 2:
if ($short)
$sein = "T";
else
$sein = "Tage";
break;
case 3:
if ($short)
$sein = "W";
else
$sein = "Wochen";
break;
case 4:
if ($short)
$sein = "M";
else
$sein = "Monate";
break;
case 5:
if ($short)
$sein = "Q";
else
$sein = "Quartale";
break;
case 6:
if ($short)
$sein = "J";
else
$sein = "Jahre";
break;
default: $sein = "NaN";
}
return $sein;
}
function GetStrMonth($mon, $short=true) {
switch ($mon) {
case 1:
if ($short)
$sm = "Jan";
else
$sm = "J%auml;nner";
break;
case 2:
if ($short)
$sm = "Feb";
else
$sm = "Februar";
break;
case 3:
if ($short)
$sm = "Mär";
else
$sm = "März";
break;
case 4:
if ($short)
$sm = "Apr";
else
$sm = "April";
break;
case 5:
$sm = "Mai";
break;
case 6:
if ($short)
$sm = "Jun";
else
$sm = "Juni";
break;
case 7:
if ($short)
$sm = "Jul";
else
$sm = "Juli";
break;
case 8:
if ($short)
$sm = "Aug";
else
$sm = "August";
break;
case 9:
if ($short)
$sm = "Sep";
else
$sm = "September";
break;
case 10:
if ($short)
$sm = "Okt";
else
$sm = "Oktober";
break;
case 11:
if ($short)
$sm = "Nov";
else
$sm = "November";
break;
case 12:
if ($short)
$sm = "Dez";
else
$sm = "Dezember";
break;
default: $sm = "NaN";
}
return $sm;
}
# Errechne das Endedatum ausgehend von einem gegebenen Datum, abhaengig
# von der eingestellten Einheit.
#
function GetEDate($einheit, $dt, $len) {
switch ($einheit) {
case 1: $edate = $dt + (3600 * $len); break;
case 2: $edate = $dt + (86400 * $len); break;
case 3: $edate = $dt + ((86400 * 7) * $len); break;
case 4: $edate = $dt + ((86400 * 30) * $len); break;
case 5: $edate = $dt + ((86400 * 91) * $len); break;
case 6: $edate = $dt + ((86400 * 364) * $len); break;
}
return $edate;
}
# Setze den Tag immer auf den Letzten der eingestellten Periode.
#
function GetUltimo($dt) {
global $periode;
$day = gmdate("j", $dt);
$mon = gmdate("n", $dt);
$year = gmdate("Y", $dt);
switch($periode) {
case 1: // Jahr
$dat = gmmktime(0, 0, 0, 12, 31, $year);
break;
case 2: // Quartal
if ($mon <= 3)
$dat = gmmktime(0, 0, 0, 3, daysinmonth(3, $year), $year);
else if ($mon <= 6)
$dat = gmmktime(0, 0, 0, 6, daysinmonth(6, $year), $year);
else if ($mon <= 9)
$dat = gmmktime(0, 0, 0, 9, daysinmonth(9, $year), $year);
else
$dat = gmmktime(0, 0, 0, 12, 31, $year);
break;
case 3: // Monat
$dat = gmmktime(0, 0, 0, $mon, daysinmonth($mon, $year), $year);
break;
case 4: // Woche
$darr = getdate($dt);
$wday = $darr["wday"];
if ($wday == 0)
$wday = 7;
$miss = 7 - $wday;
$j = 0;
while ($j < $miss) {
$day++;
if (!checkdate($mon, $day, $year)) {
$day = 1;
$mon++;
if ($mon > 12) {
$mon = 1;
$year++;
}
}
$j++;
}
$dat = gmmktime(0, 0, 0, $mon, $day, $year);
break;
case 5: // Tag
$dat = $dt;
break;
}
return $dat;
}
# Erhoehe das Datum um die laenge der angegebenen Periode.
#
function IncDate($periode, $dt) {
$amon = array(31,28,31,30,31,30,31,31,30,31,30,31);
$tm = gmdate("j.n.Y", $dt);
$ad = explode(".", $tm);
switch ($periode) {
case 1: // Jahr
$ad[2]++;
break;
case 2: // Quartal
$ad[1] += 3;
if ($ad[1] > 12) {
$ad[1] = 12 - $ad[1];
$ad[2]++;
}
break;
case 3: // Monat
$ad[1]++;
if ($ad[1] > 12) {
$ad[1] = 1;
$ad[2]++;
}
if (!checkdate($ad[1], $ad[0], $ad[2]) && $ad[1] > 28)
$ad[0] = daysinmonth($ad[1], $ad[2]);
else
$ad[0] = 1;
break;
case 4: // Woche
$ad[0] += 7;
if ($ad[0] > daysinmonth($ad[1], $ad[2])) {
$ad[0] = 7 - $ad[0];
$ad[1]++;
if ($ad[1] > 12) {
$ad[1] = 1;
$ad[2]++;
}
}
break;
case 5: // Tag
$ad[0]++;
if ($ad[0] > daysinmonth($ad[1], $ad[2])) {
$ad[0] = 1;
$ad[1]++;
if ($ad[1] > 12) {
$ad[1] = 1;
$ad[2]++;
}
}
break;
}
$dt = gmmktime(0, 0, 0, $ad[1], $ad[0], $ad[2]);
return $dt;
}
# Vergleiche zwei Datum abhaengig von der eingestellten Periode. Aehnlich
# wie die Funktion strcmp() wird das Datum1 vom Datum2 abgezogen und das
# Ergebnis an die aufrufende Funktion zurueckgegeben.
#
function PerDateComp($dt1, $dt2) {
global $periode;
$day = gmdate("j", $dt1);
$mon = gmdate("n", $dt1);
$year = gmdate("Y", $dt1);
$ndt1 = gmmktime(0, 0, 0, $mon, $day, $year);
$day = gmdate("j", $dt2);
$mon = gmdate("n", $dt2);
$year = gmdate("Y", $dt2);
$ndt2 = gmmktime(0, 0, 0, $mon, $day, $year);
if ($periode == 5 || $periode == 4) { // Tag, Woche
return $ndt2 - $ndt1;
}
if ($periode == 3 || $periode == 2) { // Monat, Quartal
$dst1 = gmdate("j.n.Y", $ndt1);
$dst2 = gmdate("j.n.Y", $ndt2);
$da1 = explode(".", $dst1);
$da2 = explode(".", $dst2);
$ndt1 = gmmktime(0, 0, 0, $da1[1], 1, $da1[2]);
$ndt2 = gmmktime(0, 0, 0, $da2[1], 1, $da2[2]);
return $ndt2 - $ndt1;
}
$dst1 = gmdate("Y", $dt1);
$dst2 = gmdate("Y", $dt2);
return $dst2 - $dst1;
}
# folgende Funktion gibt die Periode zurueck, in die das uebergebene Datum
# faellt.
#
function GetPeriode($datum) {
global $periode;
$tm = gmdate("j.n.Y", $datum);
$dt = explode(".", $tm);
switch ($periode) {
case 1: // Jahr
return $dt[2];
break;
case 2: // Quartal
$xx = $dt[1] / 3;
if (($dt[1] % 3) != 0)
$xx += 1;
return (integer)$xx;
break;
case 3: // Monat
return $dt[1];
break;
case 4: // Woche
$xa = getdate($datum);
$xx = $xa["yday"] / 7;
if (($xa["yday"] % 7) != 0)
$xx += 1;
return (integer)$xx;
break;
case 5: // Tag
$xa = getdate($datum);
return $xa["yday"];
break;
}
return 0;
}
function daysinmonth($month, $year)
{
$days = 31;
while($days > 0 && !checkdate($month, $days, $year)) $days--;
return $days;
}
function GetDateRange($per, $fdate, $ldate) {
global $periode;
$mon = gmdate("n", $per);
$year = gmdate("Y", $per);
$days = 0;
switch ($periode) {
case 1: // Jahr
$fdate = gmmktime(0, 0, 0, 1, 1, $year);
$ldate = gmmktime(0, 0, 0, 12, 31, $year);
break;
case 2: // Quartal
switch ($mon) {
case 1:
case 2:
case 3:
$days = daysinmonth(3, $year);
$fdate = gmmktime(0, 0, 0, 1, 1, $year);
$ldate = gmmktime(0, 0, 0, 3, $days, $year);
break;
case 4:
case 5:
case 6:
$days = daysinmonth(6, $year);
$fdate = gmmktime(0, 0, 0, 4, 1, $year);
$ldate = gmmktime(0, 0, 0, 6, $days, $year);
break;
case 7:
case 8:
case 9:
$days = daysinmonth(9, $year);
$fdate = gmmktime(0, 0, 0, 7, 1, $year);
$ldate = gmmktime(0, 0, 0, 9, $days, $year);
break;
case 10:
case 11:
case 12:
$fdate = gmmktime(0, 0, 0, 10, 1, $year);
$ldate = gmmktime(0, 0, 0, 12, 31, $year);
break;
}
break;
case 3: // Monat
$days = daysinmonth($mon, $year);
$fdate = gmmktime(0, 0, 0, $mon, 1, $year);
$ldate = gmmktime(0, 0, 0, $mon, $days, $year);
break;
case 4: // Woche
$dt = getdate($per);
$tag = gmdate("j", $per);
$fdate = gmmktime(0, 0, 0, $mon, $tag - $dt['wday'], $year);
$ldate = gmmktime(0, 0, 0, $mon, ($tag - $dt['wday']) + 7, $year);
break;
case 5: // Tag
$fdate = $per;
$ldate = $per;
break;
}
$days = ($ldate - $fdate) / 86400;
return $days;
}
# Folgende Funktion liefert den Abstand zwischen zwei Datum, abhaengig von
# der Periode und dem Kennzeichen $pmlight. Ist Letzteres gesetzt, wird
# nur eine Periodengenaue Eingabe ermoeglicht, andernfalls eine Tagesgenaue.
#
function GetAnzEntries($von, $bis) {
global $periode;
global $pmlight;
$day = gmdate("j", $von);
$mon = gmdate("n", $von);
$year = gmdate("Y", $von);
$nvon = gmmktime(0, 0, 0, $mon, $day, $year);
$day = gmdate("j", $bis);
$mon = gmdate("n", $bis);
$year = gmdate("Y", $bis);
$nbis = gmmktime(0, 0, 0, $mon, $day, $year);
if ($nvon > $nbis)
return 0;
if ($nvon == $nbis)
return 1;
if ($pmlight) {
$vmon = gmdate("n", $nvon);
$bmon = gmdate("n", $nbis);
if ($periode == 2) {
if ($vmon >= 1 && $vmon <= 3)
$vmon = 1;
else if ($vmon >= 4 && $vmon <= 6)
$vmon = 4;
else if ($vmon >= 7 && $vmon <= 9)
$vmon = 7;
else
$vmon = 10;
if ($bmon >= 1 && $bmon <= 3)
$bmon = 3;
else if ($vmon >= 4 && $vmon <= 6)
$vmon = 6;
else if ($vmon >= 7 && $vmon <= 9)
$vmon = 9;
else
$vmon = 12;
}
$vyear = gmdate("Y", $nvon);
$byear = gmdate("Y", $nbis);
$r = 1;
while ($vmon != $bmon || $vyear != $byear) {
if ($periode == 2)
$vmon += 3;
else if ($periode == 1)
$year++;
else
$vmon++;
if ($vmon > 12) {
$vyear++;
$vmon = 1;
}
$r++;
}
return $r;
}
# Vollversion ist immer Taggenau!
# Aufgrund der Sommerzeit wird hier scheinbar kryptisch verfahren.
# FIXME! Laufzeiten ueber mehrere Jahre funtionieren nicht!!!
#
$yday_von = gmstrftime("%j", $nvon);
$yday_bis = gmstrftime("%j", $nbis);
$year_von = gmdate("Y", $nvon);
$year_bis = gmdate("Y", $nbis);
if ($year_von == $year_bis)
return $yday_bis - $yday_von + 1;
else {
$mon_von = gmdate("n", $nvon);
$mon_bis = gmdate("n", $nbis);
$yend = gmmktime(0, 0, 0, 12, 31, $year_von);
$yday_end = gmstrftime("%j", $yend);
$diff = ($yday_end - $yday_von) + $yday_bis + 1;
}
return $diff;
}
# Folgende Funktion gibt einen String zurueck, welcher in Bildschirmmasken
# dazu verwendet wird um dem Anwender zu zeigen wie er das Datum
# einzugeben hat.
#
function GetVisualDate ($dt, $pl = false) {
if (!$pl) {
switch ($dt) {
case "j.n.Y":
case "d.m.Y":
return "TT.MM.JJJJ";
break;
case "j.n.y":
case "d.m.y":
return "TT.MM.JJ";
break;
case "Y-m-d":
return "YYYY-MM-DD";
break;
case "m/d/Y":
return "MM/DD/YYYY";
break;
case "m/d/y":
return "MM/DD/YY";
break;
}
} else {
switch ($dt) {
case "j.n.Y":
case "d.m.Y":
return "MM.JJJJ";
break;
case "j.n.y":
case "d.m.y":
return "MM.JJ";
break;
case "Y-m-d":
return "YYYY-MM";
break;
case "m/d/Y":
return "MM/YYYY";
break;
case "m/d/y":
return "MM/YY";
break;
}
}
return "???";
}
function GetDBDateFormat ($time=false, $pl=false) {
global $dtformatshort;
$str = "";
if (!$pl) {
switch ($dtformatshort) {
case "j.n.Y":
case "d.m.Y":
$str = "DD.MM.YYYY";
if ($time) $str .= " HH24:MI";
break;
case "j.n.y":
case "d.m.y":
$str = "DD.MM.YY";
if ($time) $str .= " HH24:MI";
break;
case "Y-m-d":
$str = "YYYY-MM-DD";
if ($time) $str .= " HH24:MI";
break;
case "m/d/Y":
$str = "MM/DD/YYYY";
if ($time) $str .= " HH24:MI";
break;
case "m/d/y":
$str = "MM/DD/YYYY";
if ($time) $str .= " HH24:MI";
break;
default:
$str = "YYYY-MM-DD";
if ($time) $str .= " HH24:MI";
}
} else {
switch ($dtformatshort) {
case "j.n.Y":
case "d.m.Y":
return "MM.YYYY";
break;
case "j.n.y":
case "d.m.y":
return "MM.YY";
break;
case "Y-m-d":
return "YYYY-MM";
break;
case "m/d/Y":
return "MM/YYYY";
break;
case "m/d/y":
return "MM/YY";
break;
default:
$str = "YYYY-MM-DD";
if ($time) $str .= " HH24:MI";
}
}
return $str;
}
function DateToDBDate($dt) {
global $dtformatshort;
switch ($dtformatshort) {
case "j.n.Y":
case "d.m.Y":
$darr = explode(".", $dt);
$str = sprintf("%04d-%02d-%02d", $darr[2], $darr[1], $darr[0]);
break;
case "j.n.y":
case "d.m.y":
$darr = explode(".", $dt);
if ($darr[2] < 50)
$year = 2000 + $darr[2];
else
$year = 1900 + $darr[2];
$str = sprintf("%04d-%02d-%02d", $year, $darr[1], $darr[0]);
break;
case "Y-m-d":
$str = $dt;
break;
case "m/d/Y":
$darr = explode("/", $dt);
$str = sprintf("%04d-%02d-%02d", $darr[2], $darr[0], $darr[1]);
break;
case "m/d/y":
$darr = explode("/", $dt);
if ($darr[2] < 50)
$year = 2000 + $darr[2];
else
$year = 1900 + $darr[2];
$str = sprintf("%04d-%02d-%02d", $year, $darr[0], $darr[1]);
break;
default:
$str = "ERROR";
}
return $str;
}
function GetShortDate($datum) {
global $dtformatshort;
switch ($dtformatshort) {
case "j.n.Y": $sd = "n.Y"; break;
case "d.m.Y": $sd = "m.Y"; break;
case "j.n.y": $sd = "n.y"; break;
case "d.m.y": $sd = "m.y"; break;
case "Y-m-d": $sd = "Y-m"; break;
case "m/d/Y": $sd = "m/Y"; break;
case "m/d/y": $sd = "m/y"; break;
default: $sd = "n.Y";
}
return gmdate($sd, $datum);
}
function GetShortDateYear($datum) {
global $dtformatshort;
switch ($dtformatshort) {
case "j.n.Y": $sd = "j.n.y"; break;
case "d.m.Y": $sd = "d.m.y"; break;
case "Y-m-d": $sd = "y-m-d"; break;
case "m/d/Y": $sd = "m/d/y"; break;
default: $sd = $dtformatshort;
}
return gmdate($sd, $datum);
}
function GetDateSep() {
global $dtformatshort;
switch ($dtformatshort) {
case "j.n.Y":
case "d.m.Y":
case "j.n.y":
case "d.m.y": return ".";
case "Y-m-d": return "-";
case "m/d/Y":
case "m/d/y": return "/";
default: return ".";
}
}
# Folgende Funktion gibt die Tage einer Periode wieder. Die Laenge einer
# Periode haengt von der eingestellten Einheit ab.
#
function GetPerLen($dt) {
global $einheit;
global $periode;
$day = gmdate("j", $dt);
$mon = gmdate("n", $dt);
$year = gmdate("Y", $dt);
switch ($einheit) {
case 1: return 3600;
case 2: return 86400;
case 3: return 86400 * 7;
case 4: // Monat
$mon = gmdate("n", $dt);
$year = gmdate("Y", $dt);
return daysinmonth($mon, $year);
case 5: // Quartal
$mon = gmdate("n", $dt);
$year = gmdate("Y", $dt);
if ($mon >= 1 && $mon <= 3) {
$dat1 = gmmktime(0, 0, 0, 1, 1, $year);
$dat2 = gmmktime(0, 0, 0, 3, 31, $year);
} else if ($mon >= 4 && $mon <= 6) {
$dat1 = gmmktime(0, 0, 0, 4, 1, $year);
$dat2 = gmmktime(0, 0, 0, 6, 30, $year);
} else if ($mon >= 7 && $mon <= 9) {
$dat1 = gmmktime(0, 0, 0, 7, 1, $year);
$dat2 = gmmktime(0, 0, 0, 9, 31, $year);
} else {
$dat1 = gmmktime(0, 0, 0, 10, 1, $year);
$dat2 = gmmktime(0, 0, 0, 12, 31, $year);
}
return ($dat2 - $dat1) / 86400;
case 6: // Jahr
$dat1 = gmmktime(0, 0, 0, 1, 1, $year);
$dat2 = gmmktime(0, 0, 0, 12, 31, $year);
return ($dat2 - $dat1) / 86400;
}
return 0;
}
# Folgende Variablen stehen nach Einbindung dieses Includes "global" zur
# Verfuegung:
#
$ini_array = parse_ini_file("setup/settings.dat");
$periode = $ini_array['periode'];
$verteil = $ini_array['verteil'];
$einheit = $ini_array['einheit'];
$leneinheit = $ini_array['leneinheit'];
$phase = $ini_array['phase'];
$numphase = $ini_array['numphase'];
$dtformatshort = $ini_array['dtformatshort'];
$dtformatlong = $ini_array['dtformatlong'];
$datetime = $ini_array['datetime'];
$pmlight = $ini_array['pmlight'];
$role = $ini_array['role'];
$ist_erledigung = $ini_array['ist_erledigung'];
$menucolor = $ini_array['menucolor'];
$title_str = urldecode($ini_array['title']);
$ist_future = $ini_array['ist_future'];
$pj_lock = $ini_array['pj_lock'];
$statusbericht = $ini_array['statusbericht'];
$shortcuts = $ini_array['shortcuts'];
$verrmodul = $ini_array['verrmodul'];
$fixkunde = $ini_array['fixkunde'];
$stdwhg = $ini_array['stdwhg'];
$language = $ini_array['language'];
$pjcopy = $ini_array['pjcopy'];
if (!isset($phase))
$phase = 0;
if (!isset($numphase))
$numphase = 0;
if (!isset($dtformatshort))
$dtformatshort = "j.n.Y";
if (!isset($dtformatlong))
$dtformatlong = "d F Y";
if (!isset($datetime))
$datetime = "d.m.Y H:i:s";
if (!isset($pmlight))
$pmlight = 0;
if (!isset($role))
$role = false;
if (!isset($menucolor))
$menucolor = "black";
if (!isset($title_str))
$title_str = "TheoPlan";
if (!isset($ist_erledigung))
$ist_erledigung = 1;
if (!isset($ist_future))
$ist_future = 0;
if (!isset($pj_lock))
$pj_lock = 0;
if (!isset($statusbericht))
$statusbericht = false;
if (!isset($shortcuts))
$shortcuts = true;
if (!isset($verrmodul))
$verrmodul = false;
if (!isset($fixkunde))
$fixkunde = false;
if (!isset($stdwhg))
$stdwhg = 42; // EUR - Euro
if (!isset($language))
$language = "ger";
# 1 = User waehlt das Datum aus
# 2 = Abschluss bis Ultimo Vormonat (15ner Regelung!)
# 3 = Abschluss bis letzter Teilprojektabschluss
#
if (!isset($pjcopy))
$pjcopy = 3;
$VisualDate = GetVisualDate ($dtformatshort);
?>