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?