Geburtstage von Usern
Verfasst: 14.12.2002 12:37
Hi, ich hab da mal ein Feature für das anzeigen von Geburtstagen installiert. Es geht auch, bis auf das egal was für ein alter ich angeb immer auf 1970 gestellt wird. In der Install.txt datei steht dazu folgendes:
#-----[ BEFORE, ADD ]------------------------------------------
#
// Add function mkrealdate for Birthday MOD
// the originate php "mktime()", does not work proberly on all OS, especially when going back in time
// before year 1970 (year 0), this function "mkrealtime()", has a mutch larger valid date range,
// from 1901 - 2099. it returns a "like" UNIX timestamp divided by 86400, so
// calculation from the originate php date and mktime is easy.
// mkrealdate, returns the number of day (with sign) from 1.1.1970.
function mkrealdate($day,$month,$birth_year)
{
// range check months
if ($month<1 || $month>12) return "error";
// range check days
switch ($month)
{
case 1: if ($day>31) return "error";break;
case 2: if ($day>29) return "error";
$epoch=$epoch+31;break;
case 3: if ($day>31) return "error";
$epoch=$epoch+59;break;
case 4: if ($day>30) return "error" ;
$epoch=$epoch+90;break;
case 5: if ($day>31) return "error";
$epoch=$epoch+120;break;
case 6: if ($day>30) return "error";
$epoch=$epoch+151;break;
case 7: if ($day>31) return "error";
$epoch=$epoch+181;break;
case 8: if ($day>31) return "error";
$epoch=$epoch+212;break;
case 9: if ($day>30) return "error";
$epoch=$epoch+243;break;
case 10: if ($day>31) return "error";
$epoch=$epoch+273;break;
case 11: if ($day>30) return "error";
$epoch=$epoch+304;break;
case 12: if ($day>31) return "error";
$epoch=$epoch+334;break;
}
$epoch=$epoch+$day;
$epoch_Y=sqrt(($birth_year-1970)*($birth_year-1970));
$leapyear=round((($epoch_Y+2) / 4)-.5);
if (($epoch_Y+2)%4==0)
{// curent year is leapyear
$leapyear--;
if ($birth_year >1970 && $month>=3) $epoch=$epoch+1;
if ($birth_year <1970 && $month<3) $epoch=$epoch-1;
} else if ($month==2 && $day>28) return "error";//only 28 days in feb.
//year
if ($birth_year>1970)
$epoch=$epoch+$epoch_Y*365-1+$leapyear;
else
$epoch=$epoch-$epoch_Y*365-1-$leapyear;
return $epoch;
}
// Add function realdate for Birthday MOD
// the originate php "date()", does not work proberly on all OS, especially when going back in time
// before year 1970 (year 0), this function "realdate()", has a mutch larger valid date range,
// from 1901 - 2099. it returns a "like" UNIX date format (only d,m and Y, may be used)
// is expect a input like a UNIX timestamp divided by 86400, so
// calculation from the originate php date and mktime is easy.
// e.g. realdate ("m d Y", 3) returns the string "1 3 1970"
function realdate($date_syntax,$date)
{
global $lang;
$birth_year=0;
$date_mid=$date;
$i=2;
if ($date>=0)
{
while ($date_mid > 364)
{
$year++;
$date_mid-=365;
if ($i++==3)
{
$i=0;
$date_mid--;
}
}
if (date_mid<=0 && $i==0)
{
$date_mid++;
}
} else
{
while ($date_mid<0)
{
$year--;
$date_mid+=365;
if ($i++==3)
{
$i=0;
$date_mid++;
}
}
}
$days=$date_mid;
if (($birth_year+2)%4==0)
{
if ($date_mid>334)
{
$day=$date_mid-334;
$month=12;
} else if ($date_mid>304)
{
$day=$date_mid-304;
$month=11;
} else if ($date_mid>273)
{
$day=$date_mid-273;
$month=10;
} else if ($date_mid>243)
{
$day=$date_mid-243;
$month=9;
} else if ($date_mid>212)
{
$day=$date_mid-212;
$month=8;
} else if ($date_mid>181)
{
$day=$date_mid-181;
$month=7;
} else if ($date_mid>151)
{
$day=$date_mid-151;
$month=6;
} else if ($date_mid>120)
{
$day=$date_mid-120;
$month=5;
} else if ($date_mid>90)
{
$day=$date_mid-90;
$month=4;
} else if ($date_mid>59)
{
$day=$date_mid-59;
$month=3;
} else if ($date_mid>30)
{
$day=$date_mid-30;
$month=2;
} else
{
$month=1;
$day=$date_mid+1;
}
} else
{
if ($date_mid>333)
{
$day=$date_mid-333;
$month=12;
} else if ($date_mid>303)
{
$day=$date_mid-303;
$month=11;
} else if ($date_mid>272)
{
$day=$date_mid-272;
$month=10;
} else if ($date_mid>242)
{
$day=$date_mid-242;
$month=9;
} else if ($date_mid>211)
{
$day=$date_mid-211;
$month=8;
} else if ($date_mid>180)
{
$day=$date_mid-180;
$month=7;
} else if ($date_mid>150)
{
$day=$date_mid-150;
$month=6;
} else if ($date_mid>119)
{
$day=$date_mid-119;
$month=5;
} else if ($date_mid>89)
{
$day=$date_mid-89;
$month=4;
} else if ($date_mid>58)
{
$day=$date_mid-58;
$month=3;
} else if ($date_mid>30)
{
$day=$date_mid-30;
$month=2;
} else
{
$month=1;
$day=$date_mid+1;
}
}
if (!(strrpos($date_syntax, "j") ===false))
$date_syntax = str_replace('j',$day,$date_syntax);
else
{
if ($day<10)$day='0'.($day);
$date_syntax = str_replace('d',$day,$date_syntax);
}
if (!(strrpos($date_syntax, "n") ===false))
$date_syntax = str_replace('n',$month,$date_syntax);
else
{
if ($month<10)$month='0'.($month);
$date_syntax = str_replace('m',$month,$date_syntax);
$month--;
$date_table = array ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$date_syntax = str_replace('M',$lang['datetime'][$date_table[$month]],$date_syntax);
}
$birth_year=$birth_year+1970;
$date_syntax = str_replace('Y',$birth_year,$date_syntax);
return $date_syntax;
}
Was bedeuten denn die beiden Hinweistexte da drinn? Kann mir da vielleicht einer helfen?
#-----[ BEFORE, ADD ]------------------------------------------
#
// Add function mkrealdate for Birthday MOD
// the originate php "mktime()", does not work proberly on all OS, especially when going back in time
// before year 1970 (year 0), this function "mkrealtime()", has a mutch larger valid date range,
// from 1901 - 2099. it returns a "like" UNIX timestamp divided by 86400, so
// calculation from the originate php date and mktime is easy.
// mkrealdate, returns the number of day (with sign) from 1.1.1970.
function mkrealdate($day,$month,$birth_year)
{
// range check months
if ($month<1 || $month>12) return "error";
// range check days
switch ($month)
{
case 1: if ($day>31) return "error";break;
case 2: if ($day>29) return "error";
$epoch=$epoch+31;break;
case 3: if ($day>31) return "error";
$epoch=$epoch+59;break;
case 4: if ($day>30) return "error" ;
$epoch=$epoch+90;break;
case 5: if ($day>31) return "error";
$epoch=$epoch+120;break;
case 6: if ($day>30) return "error";
$epoch=$epoch+151;break;
case 7: if ($day>31) return "error";
$epoch=$epoch+181;break;
case 8: if ($day>31) return "error";
$epoch=$epoch+212;break;
case 9: if ($day>30) return "error";
$epoch=$epoch+243;break;
case 10: if ($day>31) return "error";
$epoch=$epoch+273;break;
case 11: if ($day>30) return "error";
$epoch=$epoch+304;break;
case 12: if ($day>31) return "error";
$epoch=$epoch+334;break;
}
$epoch=$epoch+$day;
$epoch_Y=sqrt(($birth_year-1970)*($birth_year-1970));
$leapyear=round((($epoch_Y+2) / 4)-.5);
if (($epoch_Y+2)%4==0)
{// curent year is leapyear
$leapyear--;
if ($birth_year >1970 && $month>=3) $epoch=$epoch+1;
if ($birth_year <1970 && $month<3) $epoch=$epoch-1;
} else if ($month==2 && $day>28) return "error";//only 28 days in feb.
//year
if ($birth_year>1970)
$epoch=$epoch+$epoch_Y*365-1+$leapyear;
else
$epoch=$epoch-$epoch_Y*365-1-$leapyear;
return $epoch;
}
// Add function realdate for Birthday MOD
// the originate php "date()", does not work proberly on all OS, especially when going back in time
// before year 1970 (year 0), this function "realdate()", has a mutch larger valid date range,
// from 1901 - 2099. it returns a "like" UNIX date format (only d,m and Y, may be used)
// is expect a input like a UNIX timestamp divided by 86400, so
// calculation from the originate php date and mktime is easy.
// e.g. realdate ("m d Y", 3) returns the string "1 3 1970"
function realdate($date_syntax,$date)
{
global $lang;
$birth_year=0;
$date_mid=$date;
$i=2;
if ($date>=0)
{
while ($date_mid > 364)
{
$year++;
$date_mid-=365;
if ($i++==3)
{
$i=0;
$date_mid--;
}
}
if (date_mid<=0 && $i==0)
{
$date_mid++;
}
} else
{
while ($date_mid<0)
{
$year--;
$date_mid+=365;
if ($i++==3)
{
$i=0;
$date_mid++;
}
}
}
$days=$date_mid;
if (($birth_year+2)%4==0)
{
if ($date_mid>334)
{
$day=$date_mid-334;
$month=12;
} else if ($date_mid>304)
{
$day=$date_mid-304;
$month=11;
} else if ($date_mid>273)
{
$day=$date_mid-273;
$month=10;
} else if ($date_mid>243)
{
$day=$date_mid-243;
$month=9;
} else if ($date_mid>212)
{
$day=$date_mid-212;
$month=8;
} else if ($date_mid>181)
{
$day=$date_mid-181;
$month=7;
} else if ($date_mid>151)
{
$day=$date_mid-151;
$month=6;
} else if ($date_mid>120)
{
$day=$date_mid-120;
$month=5;
} else if ($date_mid>90)
{
$day=$date_mid-90;
$month=4;
} else if ($date_mid>59)
{
$day=$date_mid-59;
$month=3;
} else if ($date_mid>30)
{
$day=$date_mid-30;
$month=2;
} else
{
$month=1;
$day=$date_mid+1;
}
} else
{
if ($date_mid>333)
{
$day=$date_mid-333;
$month=12;
} else if ($date_mid>303)
{
$day=$date_mid-303;
$month=11;
} else if ($date_mid>272)
{
$day=$date_mid-272;
$month=10;
} else if ($date_mid>242)
{
$day=$date_mid-242;
$month=9;
} else if ($date_mid>211)
{
$day=$date_mid-211;
$month=8;
} else if ($date_mid>180)
{
$day=$date_mid-180;
$month=7;
} else if ($date_mid>150)
{
$day=$date_mid-150;
$month=6;
} else if ($date_mid>119)
{
$day=$date_mid-119;
$month=5;
} else if ($date_mid>89)
{
$day=$date_mid-89;
$month=4;
} else if ($date_mid>58)
{
$day=$date_mid-58;
$month=3;
} else if ($date_mid>30)
{
$day=$date_mid-30;
$month=2;
} else
{
$month=1;
$day=$date_mid+1;
}
}
if (!(strrpos($date_syntax, "j") ===false))
$date_syntax = str_replace('j',$day,$date_syntax);
else
{
if ($day<10)$day='0'.($day);
$date_syntax = str_replace('d',$day,$date_syntax);
}
if (!(strrpos($date_syntax, "n") ===false))
$date_syntax = str_replace('n',$month,$date_syntax);
else
{
if ($month<10)$month='0'.($month);
$date_syntax = str_replace('m',$month,$date_syntax);
$month--;
$date_table = array ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$date_syntax = str_replace('M',$lang['datetime'][$date_table[$month]],$date_syntax);
}
$birth_year=$birth_year+1970;
$date_syntax = str_replace('Y',$birth_year,$date_syntax);
return $date_syntax;
}
Was bedeuten denn die beiden Hinweistexte da drinn? Kann mir da vielleicht einer helfen?