Używam na moim forum, modyfikacji jak urodziny.
Chciałbym teraz aby data tych urodzin była wyświetlana na mojej innej stornie WWW
Jako, że niektórzy urodzili się przed rokiem 1970, funkcja mktime() nie byłaby dobra;/
Podaję tutaj teraz 2 funkcje które generują datę:
// 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)); 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 date, related letters may be used, due to the fact that // the given date value should already be divided by 86400 - leaving no time information left) // a input like a UNIX timestamp divided by 86400 is expected, so // calculation from the originate php date and mktime is easy. // e.g. realdate ("m d Y", 3) returns the string "1 3 1970" // UNIX users should replace this function with the below code, since this should be faster // //function realdate($date_syntax="Ymd",$date=0) //{ return create_date($date_syntax,$date*86400+1,0); } function realdate($date_syntax="Ymd",$date=0) { $i=2; if ($date>=0) { return create_date($date_syntax,$date*86400+1,0); } else { $year= -(date%1461); $days = $date + $year*1461; while ($days<0) { $year--; $days+=365; if ($i++==3) { $i=0; $days++; } } } $leap_year = ($i==0) ? TRUE : FALSE; $months_array = ($i==0) ? for ($month=1;$month<12;$month++) { if ($days<$months_array[$month]) break; } $day=$days-$months_array[$month-1]+1; //you may gain speed performance by remove som of the below entry's if they are not needed/used 'a' => '', 'A' => '', '\\d' => 'd', 'd' => ($day>9) ? $day : '0'.$day, '\\D' => 'D', 'D' => $lang['day_short'][($date-3)%7], '\\F' => 'F', 'F' => $lang['month_long'][$month-1], 'g' => '', 'G' => '', 'H' => '', 'h' => '', 'i' => '', 'I' => '', '\\j' => 'j', 'j' => $day, '\\l' => 'l', 'l' => $lang['day_long'][($date-3)%7], '\\L' => 'L', 'L' => $leap_year, '\\m' => 'm', 'm' => ($month>9) ? $month : '0'.$month, '\\M' => 'M', 'M' => $lang['month_short'][$month-1], '\\n' => 'n', 'n' => $month, 'O' => '', 's' => '', 'S' => '', '\\t' => 't', 't' => $months_array[$month]-$months_array[$month-1], 'w' => '', '\\y' => 'y', 'y' => ($year>29) ? $year-30 : $year+70, '\\Y' => 'Y', 'Y' => $year+1970, '\\z' => 'z', 'z' => $days, '\\W' => '', 'W' => '') ); } // End add - Birthday MOD
Możemy sobie wygenerować jakąś datę:
np
<?php $birthday = mkrealdate(01,01,1990); ?>
1 styczeń 1990 to taka data: 7305
Jak widać tworzy daty bardzo ładnie

Mój problem to: Jak sprowadzić datę, która wyszła nam w funkcji na datę, którą człowiek potrafi odczytać.
Próbując analogicznie jak w przypadku 'kodowania' daty:
$birthday = realdate('d M Y', 7306); ?>
Otrzymujemy błąd :
Call to undefined function: create_date()
Błąd ten wynika gdyż funkcja realdate ma coś takiego
Kod
return create_date
a tej funkcji nie mam;/No, to poszukałem dalej na moim forum pliku, który ma tę funkcje.
oto ona:
function create_date($format, $gmepoch, $tz) { { { $translate[$match] = $replace; } } }
Niestety ta funkcja ma trochę zmiennych globalnych,
I Jeśli dodamy ją do naszego pliku, to skrypt również nie zadziała.
Ma ktoś może funkcję create_date która nie zawiera zmiennych i która nadawałaby się do mojego skryptu?
Tutaj coś znalazłem może kogoś to natchnie, bo ja nie ogarniam tego
http://mody.lastinn.info/funkcja_create_da...hpbb-t1144.html