DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > PHP
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

PHP PHP aplikacije, Smarty, PEAR

Odgovori
 
Alati teme Način prikaza
Staro 04. 03. 2008.   #1
bluesman
Goran Pilipović
Sir Write-a-Lot
 
Avatar bluesman
 
Datum učlanjenja: 18.05.2005
Lokacija: Beograd
Poruke: 5.450
Hvala: 288
1.247 "Hvala" u 446 poruka
bluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušati
Pošaljite ICQ poruku za bluesman
Default 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:
$current_week date("W"); 
"W - ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0)"

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:

mysql> select WEEK('2008-01-01');
+--------------------+
| WEEK('2008-01-01') |
+--------------------+
| 0 |
+--------------------+
1 row in set (0.03 sec)
... i tako sve do 5. januara daje da je to nedelja 0

mysql> select WEEK('2008-01-05');
+--------------------+
| WEEK('2008-01-05') |
+--------------------+
| 0 |
+--------------------+
1 row in set (0.00 sec)

mysql> select WEEK('2008-01-06');
+--------------------+
| WEEK('2008-01-06') |
+--------------------+
| 1 |
+--------------------+
1 row in set (0.00 sec)
Tek za 6. januar daje da je to nedelja 1

Kada probam iz php, dobijem za iste datume:
PHP kôd:
echo date("W"mktime(0,0,0,1,1,2008)); 
Da je to nedelja 1
a za 6. januar dobijem:
PHP kôd:
echo date("W"mktime(0,0,0,1,6,2008)); 
Takodje nedelja 1
Tek za 7. januar dobije da je 2. nedelja
PHP kôd:
echo date("W"mktime(0,0,0,1,7,2008)); 
Za 2007. godinu, MySQL od 1.1.2007 do 6.1.2007 daje da je nedelja 0, 7.1.2007 je nedelja 1

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:
%W - week number of the current year as a decimal number, starting with the first Monday as the first day of the first week
sto je identicno kao i za date("W")

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!
bluesman je offline   Odgovorite uz citat
Staro 04. 03. 2008.   #2
japan
novi klan
Professional
 
Avatar japan
 
Datum učlanjenja: 03.02.2007
Poruke: 326
Hvala: 43
427 "Hvala" u 50 poruka
japan će postati "faca" uskorojapan će postati "faca" uskorojapan će postati "faca" uskorojapan će postati "faca" uskorojapan će postati "faca" uskoro
Default

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
japan je offline   Odgovorite uz citat
Staro 04. 03. 2008.   #3
filjo
novi član
Na probnom radu
 
Datum učlanjenja: 31.07.2007
Poruke: 23
Hvala: 0
7 "Hvala" u 5 poruka
filjo is on a distinguished road
Default

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).
filjo je offline   Odgovorite uz citat
Staro 04. 03. 2008.   #4
japan
novi klan
Professional
 
Avatar japan
 
Datum učlanjenja: 03.02.2007
Poruke: 326
Hvala: 43
427 "Hvala" u 50 poruka
japan će postati "faca" uskorojapan će postati "faca" uskorojapan će postati "faca" uskorojapan će postati "faca" uskorojapan će postati "faca" uskoro
Default

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:
W - ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0)

PHP manual: strftime

Citat:
%V - The ISO 8601:1988 week number of the current year as a decimal number, range 01 to 53, where week 1 is the first week that has at least 4 days in the current year, and with Monday as the first day of the week. (Use %G or %g for the year component that corresponds to the week number for the specified timestamp.)
Citat:
%W - week number of the current year as a decimal number, starting with the first Monday as the first day of the first week

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 12:15.
japan je offline   Odgovorite uz citat
Odgovori


Alati teme
Način prikaza

Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum

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. 17:50
PR WEEK Belgrade 2006. Ilija Studen Opušteno 13 05. 11. 2006. 14:17


Vreme je GMT +2. Trenutno vreme je 17:03.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.