04. 03. 2008. | #1 | |
Goran Pilipović
Sir Write-a-Lot
|
Week razlike u Mysql i PHP
Imam neki select gde user izabere koju hoce nedelju u kojoj godini i salje se varijabla: $week=2008-09, gde je 2008 godina, a 09 - nedelja.
Trenutnu nedelju dobijem sa PHP kôd:
I onda iz mysql citam: SELECT * FROM table WHERE DATE_FORMAT(polje_date, "%Y-%v") = '$week' "%v - Week (01..53), where Monday is the first day of the week" Sto bi dalo u ovom slucaju SELECT * FROM table WHERE DATE_FORMAT(polje_date, "%Y-%v") = '2008-09' Medjutim primetim da mi u ovoj godini prikazuje za nedelju dana kasnije, znaci iz PHP dobijem datume za 10. nedelju (Mart mesec): Mon 10, Tue 11.... Sun 16 Medjutim iz baze dobijem datume za nedelju dana ranije, znaci od: Mon 03... do Sun 09 Pa mi onda u desetoj nedelji (od 10 do 16) prikazuje stavke sa datumom 04.03.2008 Kada hocu da proverim o cemu se radi, probam iz mysql: ... i tako sve do 5. januara daje da je to nedelja 0 Tek za 6. januar daje da je to nedelja 1 Kada probam iz php, dobijem za iste datume: PHP kôd:
a za 6. januar dobijem: PHP kôd:
Tek za 7. januar dobije da je 2. nedelja PHP kôd:
PHP od 1.1.2007 do 7.1.2007. daje da je nedelja 1, a tek 8.1.2007 je nedelja 2. Pomislio sam da gresim oko week start, da li je nedelja ili ponedeljak, ali to cak i u php nije isto, recimo za danasnji dan (utorak, 4. mart): strftime("%W") - daje nedelju 09 PHP manual: strftime date("W") - daje nedelju 10 PHP manual: date Iako u manualu pise za strftime "%W": Citat:
Da li moze neko ko vidi ovde logiku malo da mi pojasni zasto je to tako?
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman I don't always know what I'm talking about but I know I'm right! |
|
04. 03. 2008. | #2 |
novi klan
Professional
Datum učlanjenja: 03.02.2007
Poruke: 326
Hvala: 43
427 "Hvala" u 50 poruka
|
imao sam slican problem, ali sam nasao resenje i nisam isao tako daleko da istrazujem zasto je to tako.
uglavnom, mysql week funkcija ima jos jedan, opcioni parametar koji odredjuje kako ce se racunati nedelja u godini za prosledjeni datum. pravilnim izborom tog parametra moze da se dobije isto ono sto daje php. http://dev.mysql.com/doc/refman/5.0/...#function_week a sad, zasto se mysql default ne poklapa sa onim sto daje php...
__________________
We professional we dealin' with business |
04. 03. 2008. | #3 |
novi član
Na probnom radu
Datum učlanjenja: 31.07.2007
Poruke: 23
Hvala: 0
7 "Hvala" u 5 poruka
|
Koristi:
WEEKOFYEAR(date) Returns the calendar week of the date as a number in the range from 1 to 53. WEEKOFYEAR() is a compatibility function that is equivalent to WEEK(date,3). |
04. 03. 2008. | #4 | |||
novi klan
Professional
Datum učlanjenja: 03.02.2007
Poruke: 326
Hvala: 43
427 "Hvala" u 50 poruka
|
mislim da je ovde glavani problem los opis u php manualu koji za funkciju date ne kaze da treba nedelja da ima vise od tri dana u toj godini da bi se smatrala prvom...
PHP manual: date Citat:
PHP manual: strftime Citat:
Citat:
pre svega, blues, ja bih rekao da srtftime("%W") != date("W") = strftime("%V") i da zato dobijas razlicite rezultate iz samog php-a. ako dobro citam, date("W") bi trebalo da daje isto sto i mysql week(date, 3), bas kao sto je filjo napisao. tvoj problem ne bi ni postojao kad bi mysql po defaultu sistemsku promenljivu default_week_format drzao na tri, sto bi onda bilo po ISO-8601. koliko vidim, default je 0. mysql > show variables to bi moglo da se resi tako sto bi se ta promenljiva postavila na 3 mysql > set default_date_format=3 ali ko zna sta bi sve to moglo da povuce za sobom (a i aplikacija ti zavisi od serverskih podesavanja u tom slucaju), pa je, po meni, bolje umesto date("W") koristiti strftime (posto ne vidim da date ima drugi format za nedelju sem "W"), sa formatom uskladjenim sa onim koji trazi od mysql-a.
__________________
We professional we dealin' with business Poslednja izmena od japan : 04. 03. 2008. u 11:15. |
|||
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Aktivan i zakljucan RS domen - razlike | Dejan Bizinger | Domain Name Service (DNS) | 4 | 02. 06. 2008. 16:50 |
PR WEEK Belgrade 2006. | Ilija Studen | Opušteno | 13 | 05. 11. 2006. 13:17 |