Autor Zpráva
Venushja
Profil
Zdravim lidi
mam tu problem delam takovej system na vypocet kolik ti je let a kolik ti zbyva do narozenin ale rpoblem je v tom ze kdyz tam treba zadam treba 17.01.1993 a dnes je 18.01.2009 tak problem je v tom ze se pred cislici u dne objeví mínus a to je docela divny nejde nako udelat aby se pokazdy objevilo +cislo ?

Treba do tvy narozenim zbyva 1 den a ne -1 den ??? a zase problem je v tom kdyz otocim promenne tak to je zase obracene cislo vetsi nez datum hodi pred sebe vzdycky - pred cislo a uz si s tim nevim rady vubec.
grimword
Profil
nechceš sem dát ten skript co už máš? ono se přece jenom líp odráží od již nějakého základu než ti to psát celé od začátku
tiso
Profil
Venushja
if($cislo < 0){$cislo+=365;}
imploder
Profil
Vyrobil jsem tohle.
Vypíše to za kolik měsíců a dnů budeš mít ode dneška narozeniny; přestupný rok se zjišťuje date("L"). To je ale pro letošek, takže když tam budeš dodělávat další roky na přesné určení doby od narození, tak to budeš muset vyřešit. Date("L") vrací jestli je přestupný rok jenom pro aktuální datum, nevím, jak by se to zjišťovalo pro jiné roky.
imploder
Profil
Jo a tahle funkce vracející tvar podstatného jména pro použití s určitým číslem se možná bude hodit i někomu jinému.
/* Vrátí tvar podstatného jména pro použití společně s číslem jako výraz v 1. pádě.
 * např. 1 motor, 3 motory, 10 motorů
 * pole tvarů: 
 * $nsg = tvar v jednotném čísle 1. pádě (pro číslo 1)
 * $npl = tvar v množném čísle 1. pádě (od 2 do 4)
 * $gpl = tvar v množném čísle 2. pádě (ostatní čísla a pojmenované skupiny (např. horda *vlků*))
 */
function napocitej($pocet, $nsg, $npl, $gpl) {
  if($pocet==1) return $nsg;
  if($pocet>1 && $pocet<5) return $npl;
  return $gpl;
}
svadla
Profil
Venushja

a abs() by to nevyresilo?
imploder
Profil
svadla
To rozhodně ne, třeba pokud by ses narodil 18.1., tak by ti to potom spočítalo, že zítra máš narozeniny, i když ve skutečnosti je máš až za rok bez jednoho dne.
svadla
Profil
imploder
pravda
charlie22
Profil *
..podle me to je uplne z cesty tohle reseni..uz jsem to resil v jinem vlakne, nemuzu ho ted najit, ale opet doporucuji prostudovat funkci
strtotime() 
v PHP manualu. Jen ve zkratce asi takhle:

<?
$datumNarozeni = strtotime('20.10.1985');
$aktualniCas = time();
$aktualniRok = date('Y',$aktualniCas);
$oslavaLetos = strtotime('20.10.'.$aktualniRok) - $aktualniCas;

//kontrola narozenin
if ($oslavaLetos<0)
echo 'Narozeniny jsi uz mel, ale asi si to nepamatujes';
if ($oslavaLetos==0)
echo 'Gratulace, dnes mas narozeniny';
if ($oslavaLetos>0){
$mesicu = date('m',$oslavaLetos);
$dnuOdZacatkuRoku = date('z',$aktualniCas);
$dnuDoOslavyOdZacatkuRoku = date('z',$oslavaLetos);
$dnuZbyvajicich = $dnuDoOslavyOdZacatkuRoku-$dnuOdZacatkuRoku;
echo 'Do oslavy ti zbyva '.$mesicu.' měsíců, t.j. '.$dnuZbyvajicich.'dnů.';

};
?>
charlie22
Profil *
jak dostanes data do promenne $datumNarozoni je na tobe.
imploder
Profil
charlie22
moje řešení je lepší v tom, že mu nevadí, když je oslava až příští rok - taky spočítá kolik zbývá měsíců a dnů
charlie22
Profil *
jezisi, tak to je otazka upravy scriptu jenom, nemam na to ted cas....ale tvuj script je jaksi neprehledny a zbytecne slozity
charlie22
Profil *
..navic jaksi pocita s nejakymi cisly a vubec nepocita s realnym casem, tkaze bych ho jednoznacne zavrhl.
imploder
Profil
Hlavní v tom mojem skriptu je část
$delka_m[1] = 31; $delka_m[2] = 28+date("L");
$delka_m[3] = 31; $delka_m[4] = 30;
$delka_m[5] = 31; $delka_m[6] = 30;
$delka_m[7] = 31; $delka_m[8] = 30;
$delka_m[9] = 31; $delka_m[10] = 30;
$delka_m[11] = 31; $delka_m[12] = 30;

$datum1 = date("j.n."); 
$datum2 = $_GET['d'].".".$_GET['m'].".";
sscanf($datum1, "%d.%d.", $den1, $mesic1);
sscanf($datum2, "%d.%d.", $den2, $mesic2);
$rozdil_d = $den2 - $den1; 
$rozdil_m = $mesic2 - $mesic1; 
if($rozdil_d < 0) { $rozdil_d += $delka_m[$mesic1]; $rozdil_m--; }
if($rozdil_m < 0) $rozdil_m += 12;

Zbytek je rozhraní okolo, aby to šlo pohodlně zkoušet.
charlie22
Profil *
a muzes mi rict, proc tam mas to pole a nevyuzivas casove funkce PHP????
imploder
Profil
charlie22
..navic jaksi pocita s nejakymi cisly a vubec nepocita s realnym casem, tkaze bych ho jednoznacne zavrhl.
Jestli myslíš ty čísla v poli $delka_m, tak to jsou délky měsíců a jsou to reálné hodnoty pro aktuální rok (pro jiný by se muselo nějak jinak než date("L") určit, jestli je přestupný).
imploder
Profil
charlie22
a muzes mi rict, proc tam mas to pole a nevyuzivas casove funkce PHP????
protože ty mi dají délku měsíce jenom pro dnešní datum - tj. aktuální měsíc
EDIT: aspoň teda date("t")
charlie22
Profil *
no a na co je tam máš, když PHP to umí vypočítat? No když myslíš, že je to lepší pře zbytečný pole, tak tě u toho nechám.
imploder
Profil
charlie22
Máš pravdu, mohl bych místo toho volat date("t", <timestamp pro ten konkrétní měsíc>), ale nevím, jak ten timestamp udělat. Nepochybně to jde, moje řešení s polem je jen náhražka. Na principu počítání rozdílu datumů to nic nemění.
charlie22
Profil *
timestap si vyrobis funkci
strtotime()
prostuduj si muj kod a manual PHP, s casem toho PHP umi celkem dost..v jednoduchosti je sila. .-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: