2013-03-22 17 views

Odpowiedz

33

Trzeba tryb 3 Określ na wezwanie mysql YEARWEEK:

SELECT YEARWEEK(now(),3); 

PHP date() zastępczy W zwraca numer tygodnia według do ISO 8601 specification. Oznacza to, że tygodnie rozpoczynają się w poniedziałek (nie w niedzielę), pierwszy tydzień roku to numer 1 (nie 0), a ten tydzień jest pierwszym, który ma co najmniej 4 dni w nowym roku (więc jest to tydzień zawierający nowy pierwszy czwartek w roku). Według the documentation for the MySQL WEEK function, że kombinacja opcji jest tryb 3.

Ponadto, aby ciągnąć nutę Alles jest w przyjętym odpowiedź, bo to ważne: placeholder'y Y i W nie idą w parze. Jeśli chcesz, aby rok, który jest zgodny z numerem tygodnia ISO, powinieneś użyć o zamiast Y. Rozważmy na przykład w poniedziałek, 29 grudnia 2014:

date('YW', mktime(0,0,0,12,29,2014)); #=> 201401 : 1st week of 2014?? 
date('oW', mktime(0,0,0,12,29,2014)); #=> 201501 : better 
+0

Dziękuję Mark. Odpowiedź na to pytanie brzmi: –

+0

+1, ale co zrobić, jeśli chcę używać YEARWEEK do gromadzenia danych tygodniowo, a chcę, aby niedziela była pierwszym dniem tygodnia?Wydaje się, że PHP nie ma możliwości zmiany dnia rozpoczynającego tydzień – dzona

+0

To właśnie określa drugi argument ("tryb"). Przeczytaj odsyłacz do dokumentacji ... tryby 0, 2, 4 i 6 rozpoczynają się w niedzielę od tygodnia, różniąc się, gdy jest tydzień 1 i czy jest tydzień 0 lub 53. –

3

YEARWEEK trwa drugi (opcjonalny) parametr, który określa zakres [0- 53] lub [1-53] tygodnia).

Ta funkcja zwraca numer tygodnia dla daty. Dwuargumentowy formularz TYGODNIA() umożliwia określenie, czy tydzień rozpoczyna się w niedzielę, czy w poniedziałek i czy zwracana wartość powinna zawierać się w zakresie od 0 do 53 lub od 1 do 53. Jeśli argument trybu jest pomijany, używana jest wartość zmiennej systemowej default_week_format: .

podczas date(W) jest ISO8601 date który zawsze znajduje się w zakresie [01-53]. Dlatego domyślam się, że domyślnie YEARWEEK używa zakresu [0-53].

Tak więc, jeśli chcesz uzyskać ten sam wynik próby stosując 1 jako drugi parametr dla YEARWEEK

16

Należy pamiętać, że YEARWEEK („2012-01-01”, 3) => 201152, natomiast PHP " YW "da rok 201252. Rok w wyniku może różnić się od roku w argumencie daty za pierwszy i ostatni tydzień roku. (tj. rok w WERSJI ROKU to rok poniedziałku tygodnia, a nie rok daty użyty do obliczenia).

W celu uzyskania właściwego rezultatu, trzeba zrobić

date("oW",mktime(0, 0, 0, 1, 1, 2012)); // outputs 201152 

jako „o” daje roku tydzień należy.

Mam nadzieję, że to pomoże.

+0

Dziękuję za to! – Kostanos

+0

Dzięki za tę notatkę - zaoszczędziłem dzisiaj wiele zamieszania i potencjalnych rozdarć włosów, ponieważ dziś jest to część przyszłorocznego tygodnia. – cincodenada