Autor Zpráva
FantomX1
Profil
Potrebujem vyriesit 3 otazky tykajuce sa mojho chatu a to:

1.
Ako mam zistit vek uzivatela, ktory ma svoj datum narodenia ulozeny v databaze?

Poznamka: Tu pripominam, ze vek uzivatela bude v databaze najskor ulozeny ako date alebo datetime, ale urcite nie ako timestamp alebo ako cislo. Je to z toho dovodu ze timestamp sa pocita len od roku 1970 a preto by som nevedel urcit vek uzivatelom starsim ako 35 rokov. Ale je tu jeden problem, vedel by som to elegantne vyriesit v MySQL 5 ale zial moj server mi neposkytuje tuto verziu a ani inu databazu, a tak to musim skusit inak, len tak pre ilustraciu v MySQL 5 by som zistil vek uzivatela ako SELECT TIMESTAMPDIFF(YEARS,datum_narodenia,CURR_DATE());, DATEDIFF je uz aj v MySQL 4.1 ale DATEDIFF predava rozdiel datumov len v dnoch a neda sa urcit ze ci to chcem v rokoch, musel by som rucne prepocitavat vzhladom na prestupne roky, a to prave nechcem.

2.Ako zistim kto z uzivatelov chatu ma dnes narodeniny aby sa mu automaticky otvorilo okno s blahozelanim?

3.Ako zistim kolko dni chyba este uzivatelovi do jeho narodenin? Samozrejme do tych najblizsich.
Kajman
Profil *
Určitě je třeba použít datetime. Timestamp je na narozeniny souborů atp. Jaká verze mysql je k dispozici?
FantomX1
Profil
K dispozicii je verzia 4.1 a tam ide len datediff, ale ta nevie vratit rozdiel rokov medzi datumami, ale len rozdiel dni.
kaifman
Profil
imho kdyz se dny vedeli 365 tak sou z toho roky ne ? :)
a co treba period_diff ten zase vraci mesice ... a kdyz se to sikovne vydeli 12 tak sou z toho taky roky


2) date_format(now(), '%m%d') = date_format(narozeniny, '%m%d')
llook
Profil
imho kdyz se dny vedeli 365 tak sou z toho roky ne ?
Dost nepřesně. Různé roky jsou různě dlouhé. Většinou to ale je 365 nebo 366.
kaifman
Profil
llook vetsinou??? :D ja myslel ze rok muze mit jedine 365 nebo 366 dni ;-)

ale mas prvavdu je to dost nepresne, pokud je totiz nekomu pres 90 sekne ho to o rok
habendorf
Profil
ja myslel ze rok muze mit jedine 365 nebo 366 dni

Myslím že llook má pravdu. Nejsem si jist, ale myslím že jednou za mnoho a mnoho let se přidává 30. únor.
Ale samozřejmě pro účely skriptu na narozeniny bych to něřešil :o)
llook
Profil
Nejsem si jistý, jak to s těmi roky je. Myslím, že se také jednou za čas přidává (nebo ubírá?) jedna sekunda, ale už nevím kde jsem to četl.

Je vidět, že kalendář nevymysleli programátoři :-) .
thingwath
Profil
Jediný systém co v kalendáři je, je bordel. Přestupné sekundy jsou třeba taky: http://cs.wikipedia.org/wiki/P%C5%99estupn%C3%A1_sekunda
FantomX1
Profil
Ja sa uz pustam do vlastneho programovania skriptu na sekundy od roku 1900. Mohlo by to mat siroke vyuzitie. Vlastne sam si viem aj zmenit ze odkedy sa budu sekundy pocitat. Hoci narazil som na mnoho prekazok. Pokusim sa ich odstranit. A okrem toho, ja viem tak, ze ten den navyse (mam na mysli toho 29. Unora-Februara) sa pridava kvoli tomu, ze den nie je v skutocnosti dlhy 24 hodin, ale presne 24 hodin a 6 sekund a potom sa to pridava z tych 6 sekund. Takze by sa to dalo pocitat aj bez prestupnych rokov ale s tym ze kazdy den by mal o sestsekund viac ako sme zvyknuty.
Radek Hrabůvka
Profil
FantomX1 Dělal jsem před léty něco takového v excelu, ale ten má kalendářní funkce. Jednoducé odečtení datumů dává (v excelu) stáří ve dnech, to bylo na nic. Musel jsem získat roky, odečíst je, odečíst datumy bez roků, porovnat, jestli už dotyčný narozeniny letos měl, pak k roku připočítat 1, to proto, ať se vše správně spočte, ať je příští rok přestupný, nebo ne, a správně vše vyhodnotit. Pokud bude zájem, můžu sem hodit odkaz pro inspiraci, jede to i v OpenOffice.
PHP neznám, proto nevím, jestli má nějaké datumové funkce.
Kajman
Profil *
SELECT year(now())-year('1900-11-05')-if(DATE_ADD(now(),interval year('1900-11-05')-year(now()) year)>'1900-11-05',0,1)

Ale to je to takové.... kostrbaté :-) asi to půjde líp, ale funguje to i na 4.0.
DJ Miky
Profil *
...ale presne 24 hodin a 6 sekund...
to je zajímavý... já jsem někde četl, že den má přesně 23 hodin, 56 minut a 7 sekund...
Leo
Profil
"já jsem někde četl, že den má přesně 23 hodin, 56 minut a 7 sekund"

To je ovsem uplne jiny den, kterym se ridi otaceni hvezdne oblohy, ne hodiny v pc :-) Leo
Toto téma je uzamčeno. Odpověď nelze zaslat.

0