Pogledajte određenu poruku
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