Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dzień tygodnia i tydzień miesiąca do konkretnej daty
Forum PHP.pl > Forum > PHP
netvalue
Witam,

mam dzień tygodnia $day = 1; // poniedziałek
oraz $week = 2; // drugi dzień

jak sprawdzić jaka to data (format np.Y-m-d) uzywając powyzszych zmiennych + dodając rok 2014 i miesiąc 4 (kwiecień) ?

nospor
$week 2 - drugi tydzien kwietnia?

A co gdy kwiecien bedzie sie zaczynal w piatek a ty masz masz pokazac poniedzialek pierwszego tygodnia? Wowczas chodzi o poniedzialek w tygodniu co zaczyna sie kwiecien, czyli na dobrą sprawe bedzie to data marcowa, czy o nastepny poniedzialek, ale wowczas bedzie do juz drugi tydzien kwietnia a nie pierwszy.
ghost1511
  1. $date = new DateTime('', new DateTimeZone('Europe/Warsaw'));
  2.  
  3. $date->setISODate(2014, 15, 4);
  4. echo $date->format('Y-m-d') . "\n";


datetime.setisodate
Geston
ghost1511 to sprawdzi się w przypadku kiedy znasz datę i możesz ją ręcznie przepisać z "poniedziałek drugiego miesiąca kwietnia" na datę w formacie d-m-Y. Jeżeli jednak skrypt ma sam określać na podstawie tego jakie informacje dostanie a będą one ograniczone do numeru dnia tygodnia (1-7), numeru tygodnia w miesiącu, miesiąca i roku, to już trochę gorzej.

Trochę mało informacji z tym tygodniem. Czy chodzi o pierwszy tydzień miesiąca w sensie dni 1-7, czy o tydzień pierwszy liczony do pierwszej niedzieli miesiąca, przykładowo gdyby miesiąc zaczynał się w piątek to w pierwszym tygodniu mamy piątek, sobotę, niedzielę a od poniedziałku zaczyna się już drugi miesiąc? Jak wspomniał zresztą nospor.
ghost1511
Ja zrozumiałem, że mając dzień tygodnia, tydzień roku i rok netvalue chce poznać datę.
Geston
Tak ale sprawdziłeś w kalendarzu że drugi tydzień kwietnia jest piętnastym tygodniem roku i tak przekazałeś go funkcji setISODate(). Co jeżeli ma daty dostarczane dynamicznie?tongue.gif Dla jednej konkretnej daty ogólnie pisanie skryptu jest bez sensu bo można spojrzeć w kalendarz i gotowe więc wydaje mi się że mamy tutaj do czynienia z możliwością wystąpienia różnych przypadków jak: podaj datę piątku trzeciego tygodnia maja, podaj datę wtorku pierwszego tygodnia września itd.
ghost1511
Cytat(Geston @ 10.04.2014, 10:35:21 ) *
Tak ale sprawdziłeś w kalendarzu że drugi tydzień kwietnia jest piętnastym tygodniem roku i tak przekazałeś go funkcji setISODate(). Co jeżeli ma daty dostarczane dynamicznie?tongue.gif Dla jednej konkretnej daty ogólnie pisanie skryptu jest bez sensu bo można spojrzeć w kalendarz i gotowe więc wydaje mi się że mamy tutaj do czynienia z możliwością wystąpienia różnych przypadków jak: podaj datę piątku trzeciego tygodnia maja, podaj datę wtorku pierwszego tygodnia września itd.


Ok, ok, rozumiem thumbsupsmileyanim.gif Tylko z kodu który podał netvalue wynika, że numer tygodnia zna.
Geston
Podał ale numer tygodnia konkretnego miesiąca a nie roku tongue.gif drugi tydzień roku na pewno nie wypada w kwietniu smile.gif nie znam funkcji która przyjęłaby za argument tydzień konkretnego miesiąca i zwróciła który to tydzień ogólnie w roku.

No ale można dywagować, autor tematu dostarczył za mało informacji, może szukamy nie wiadomo czego a on w gruncie rzeczy aż tyle nie potrzebuje tongue.gif
ghost1511
Cytat(Geston @ 10.04.2014, 11:09:31 ) *
Podał ale numer tygodnia konkretnego miesiąca a nie roku tongue.gif drugi tydzień roku na pewno nie wypada w kwietniu smile.gif nie znam funkcji która przyjęłaby za argument tydzień konkretnego miesiąca i zwróciła który to tydzień ogólnie w roku.

No ale można dywagować, autor tematu dostarczył za mało informacji, może szukamy nie wiadomo czego a on w gruncie rzeczy aż tyle nie potrzebuje tongue.gif


a w ten sposób?
  1. $date = new DateTime('01-04-2014', new DateTimeZone('Europe/Warsaw')); //poczatek miesiaca
  2. $date -> add( new DateInterval('P1W') );// drugi tydzien
  3. echo $date->format('W') . "\n";


Czekamy na odpowiedź autora postu wink.gif
Geston
No niestety zwraca 15 a poniedziałek drugiego tygodnia kwietnia wypada 7-04-2014.

@ Czekamy czekamy ale spoko samemu pomyśleń nad takimi abstrakcyjnymi problemami dla ćwiczenia wink.gif
ghost1511
Cytat(Geston @ 10.04.2014, 11:15:04 ) *
No niestety zwraca 15 a poniedziałek drugiego tygodnia kwietnia wypada 7-04-2014.


No wypada. Teraz nie wiem gdzie Ty widzisz problem blink.gif
Geston
W tym że zamiast otrzymać datę 7-04-2014 Ty otrzymujesz 15 (tydzień roku liczony od 0, licząc od 1, 7-04-2014 jest w 16tym tygodniu), klienta interesuje poniedziałek drugiego tygodnia. Jak zrozumiałem on na podstawie informacji w sposób uniwersalny chce uzyskać dokładną datę i nic innego tongue.gif

Masz 4 zmienne: $rok, $miesiac, $dzien_tygodnia, $tydzien_miesiaca, z tego wyciągnij datę tongue.gif
Ja sobie poradziłem tongue.gif
ghost1511
Cytat(Geston @ 10.04.2014, 11:28:31 ) *
W tym że zamiast otrzymać datę 7-04-2014 Ty otrzymujesz 15 (tydzień roku liczony od 0, licząc od 1, 7-04-2014 jest w 16tym tygodniu), klienta interesuje poniedziałek drugiego tygodnia. Jak zrozumiałem on na podstawie informacji w sposób uniwersalny chce uzyskać dokładną datę i nic innego tongue.gif

Masz 4 zmienne: $rok, $miesiac, $dzien_tygodnia, $tydzien_miesiaca, z tego wyciągnij datę tongue.gif


W moim kalendarzu 7-04-2014 jest w 15 tygodniu wink.gif
Cytat(Geston @ 10.04.2014, 11:28:31 ) *
Ja sobie poradziłem tongue.gif

Gratulacje. Jeszcze nie dawno mówiłeś, że się nie da wink.gif
Geston
Gdzie tak napisałem? smile.gif
Przepraszam, tak jest to 15ty tydzień smile.gif
ghost1511
Cytat(Geston @ 10.04.2014, 12:10:25 ) *
Gdzie tak napisałem? smile.gif

tutaj:
Cytat(Geston @ 10.04.2014, 11:09:31 ) *
nie znam funkcji która przyjęłaby za argument tydzień konkretnego miesiąca i zwróciła który to tydzień ogólnie w roku.

Nie twierdzę, że ten sposób zadziała na 100% ewentualnie delikatnie zmodyfikować (bo faktycznie jeżeli szukamy pierwszego poniedziałku w miesiącu to trzeba trochę pokombinować). Twierdziłeś, że się nie da, ja twierdzę że się da. Pokazałem Ci jak, a Ty dalej swoje. Tutaj nie podajemy gotowych rozwiązań problemów tylko naprowadzamy delikwenta. Dostał tyle wskazówek, że na pewno sobie poradzi. Koniec dyskusji wink.gif
Geston
Twoje wskazówki są trafne i delikwent na pewno może z nich skorzystać, dlatego też nie podałem gotowego rozwiązania które spoiłem w jedną funkcję której przekazuje argumenty: numer dnia (1-poniedziałek do 7-niedziela), numer tygodnia w miesiącu (ważne - nie w roku tylko w miesiącu), sam miesiąc oraz rok, funkcja zwraca datę d-m-Y na podstawie tych informacji.

Stwierdziłem że nie znam funkcji która za argument przyjęłaby tydzień konkretnego miesiąca i to podtrzymuje, ale to nie jest równoznaczne z tym że się nie da, bo da się prawie wszystko tongue.gif obszedłem ten problem inaczej korzystając z innych funkcji i dokonując odpowiednich operacji smile.gif
netvalue
dla sprostowania zmienna $week zawiera tydzień miesiąca nie roku czyli od 1 do 5 .
$day od 1 do 7
na stałe mamy miesiąc np. 4 oraz rok np 2014
nospor
@netvalue napisales dokladnie to samo co w pierwszym poscie
netvalue
Cytat(Geston @ 10.04.2014, 12:56:15 ) *
oszedłem ten problem inaczej korzystając z innych funkcji i dokonując odpowiednich operacji smile.gif


coś więcej ?
Geston
Czy pierwszy tydzień miesiąca w kontekście Twojego skryptu to pierwsze 7 dni miesiąca, czyli jak miesiąc zaczyna się w czwartek to pierwszy tydzień kończy się w następną środę, czy pierwszy tydzień miesiąca to tydzień do niedzieli, czyli we wspomnianym przypadku czwartek, piątek, sobota, niedziela, a tydzień drugi zaczyna się w poniedziałek? To dość istotna informacja.
nospor
@Geston dokladnie o to samo pytalem w pierwszym poscie. Ale zostalem olany przez autora, moze Tobie sie bardziej poszczesci wink.gif
Geston
Ja również pisałem o tym już wcześniej podczas rozmowy z ghostem tongue.gif
nospor
Tak czy siak ja pytalem wczesniej, wiec ja wczesniej zostalem olany... wygralem.... hmmm.... wink.gif
Geston
Ja później ale być może 2 razy sad.gif
nospor
Oj juz sie nie smuc... Pojdziemy na kompromis. Ja wygralem czasowo, ty ilosciowo biggrin.gif
netvalue
mam schemat taki 1 poniedziałek - 7 niedziela

1 tydzień:
dni 1234567

2 tydzień:
dni 1234567


3 tydzień:
dni 1234567

4 tydzień:
dni 1234567

5 tydzień:
dni 1234567


Taki schemat jest mi potrzebny do zaznaczania w tabeli harmonogramu wizyt ... zwykly kalendarz by nie przeszedl. bo wizyty sie powtazaja w kazdym mc np w kazdy pierwzy poniedzialek mc i ostatni..
To jest tez odpowiedz do Nospora smile.gif dlaczego tak akurat uzylem tych dni...
Geston
To nam się sprawa komplikuje bo mamy 8 dni w tygodniu smile.gif

Czyli jak rozumiem nie jest nawet ważny tydzień, tylko to czy dany dzień, np poniedziałek, jest pierwszy w miesiącu, czy drugi, czy czwarty itd.

Reasumując, ktoś ma wizyty w np w każdą drugą i trzecią środę miesiąca i podając miesiąc i rok chcesz wiedzieć jakie to będą dokładnie daty?
netvalue
hah... poprawilem się ... to juz zmeczenie smile.gif sorki..

@Geston, tak dokładnie !:)
Geston
Cytat(Geston @ 10.04.2014, 17:21:44 ) *
(...)
Reasumując, ktoś ma wizyty w np w każdą drugą i trzecią środę miesiąca i podając miesiąc i rok chcesz wiedzieć jakie to będą dokładnie daty?


Odpowiedz jeszcze na to pytanie tongue.gif

@ok widzę edytowałeś równo z ponowieniem mojego pytania, no dobra, to teraz bardziej pytanie o "interfejs", jak ktośto ma obsługiwać? Ma przesyłać dane typu "Mam wizytę w każdy pierwszy i trzeci wtorek miesiąca, pokaż mi daty dla kwietnia 2014"? Czy bardziej mam wizyty od lutego do września w każdy pierwszy i trzeci wtorek pokaż mi wszystkie terminy?
netvalue
wygląda to tak ja jako administrator zaznaczam wizyty dla klienta (te pogrobione)

1 tydzień: dni 1234567
2 tydzień: dni 1234567
3 tydzień: dni 1234567
4 tydzień: dni 1234567
5 tydzień: dni 1234567

czyli pierwszy wtorek i trzecia sobota mesiąca.. Zapisuje się to do bazy sql

day|week|year
2|1|2014
6|3|2014


ok i teraz chce sprawdzić kiedy wypadają wizyty (konkretne daty Y-m-d) w mc kwiecien 2014 lub maj 2014 ..
Geston
To żeby nie pisać gotowców, stwórz funkcję której dostarczy dzień, tydzień, miesiąc i rok. Wywołasz ją dla każdego pobranego z bazy rekordu osobno.
Wyznacz w pętli datę pierwszego dnia owego miesiąca i z pomocą pewnej standardowej funkcji wyciągnij z niej numer dnia odpowiedni dla dnia tygodnia (1 dla poniedziału, 7 dla niedzieli).
Porównuj pobraną z daty liczbę z dniem pobranym z bazy i za każdym razem zwiększaj jakąś "flagę" ustawioną początkowo na 0 o 1.
Gdy flaga osiągnie liczbę równą przesłanej do funkcji liczbie określającej tydzień - zwróć ją returnem.
Dodatkowo możesz ilość wykonań pętli ograniczyć do dni ile ma dany miesiąc w danym roku, taką liczbę dni również uzyskasz z pewnej standardowej funkcji podając jej miesiąc i rok.
netvalue
to wszystko fajnie ale wracamy teraz do tego co Nospor stwierdzil na samym początku... Bo naprzykład mam zapisane w bazie tak

tydzień 5 dni:
1,2,3,4,5,6,7

i sprawdzając daty dla kwietnia 2014, mamy juz problem bo dzień 4 (czwartek) nie nalezy juz do 5 tygodnia kwietnia a do pierwszego tygodnia maja ...
Ghost_78
A nie możesz w bazie zapisać normalnej daty?

Wtedy przy zaznaczaniu wizyty przekazujesz konkretna date do zapisania, np:

  1. <input type="checkbox" name="wizyta[2014-04-11]"> 5 dzien 2 tydz


i wtedy gdziekolwiek bedziesz wyswietlal date tej wizyty mozesz sobie dowolnie wybrać format bez komplikowania zycia
netvalue
jak dam konkretna date to bede musial zaznaczac kazdego mc wizyty... a ja chce zeby bylo
raz zaznaczone i powtarzalo sie sekwencyjnie przez caly rok czy kilka lat
Geston
Cytat(netvalue @ 11.04.2014, 09:17:14 ) *
to wszystko fajnie ale wracamy teraz do tego co Nospor stwierdzil na samym początku... Bo naprzykład mam zapisane w bazie tak

tydzień 5 dni:
1,2,3,4,5,6,7

i sprawdzając daty dla kwietnia 2014, mamy juz problem bo dzień 4 (czwartek) nie nalezy juz do 5 tygodnia kwietnia a do pierwszego tygodnia maja ...


Określ co wtedy ma się dziać... Jeżeli w piątym tygodniu ów czwartek wypada w innym miesiącu, to co z taką wizytą? Ma jej nie być, czy ma być, a wtedy po co jest zapisana jako piąty czwartek kwietnia jak mogłaby być zapisano jako pierwszy czwartek maja...
netvalue
taka wizyta przechodzi na maj ... nie moge z gory zalozyc i zapisac do bazy ze to ma byc w nastepnym mc taki przypadek, bo tabela dziala globalnie
Ghost_78
Może to Ci jakoś pomoże:

  1. $date = new DateTime('2014-01-01');
  2. $date->modify('third monday of this month');
  3.  
  4. echo $date->format('Y-m-d');
ghost1511
na moje to powinno wyglądać tak:
  1. $dzien_tygodnia = 1; //poniedzialek
  2. $tydzien_miesiaca = 1; // 1-5
  3. $miesiac = 4;
  4. $rok = 2014;
  5.  
  6. $date = new DateTime('01-'.$miesiac.'-'.$rok, new DateTimeZone('Europe/Warsaw')); //poczatek miesiaca
  7. $tydzien_miesiaca = 'P'.($tydzien_miesiaca-1).'W';
  8. $date -> add( new DateInterval($tydzien_miesiaca) );
  9. $date2 = new DateTime('', new DateTimeZone('Europe/Warsaw'));
  10.  
  11. $date2->setISODate($rok, $date->format('W'), $dzien_tygodnia);
  12. echo $date2->format('Y-m-d') . "\n";


To ubezpiecza nas na sytuację z 5 tygodniami. I tak jeżeli ktoś ma się pojawić w poniedziałek pierwszego tygodnia każdego miesiąca to w kwietniu przyszedłby 2 razy: 31 marca(ponieważ przypada w pierwszym tygodniu kwietnia) i 28 kwietnia

W rzeczywistości tydzień miesiąca oznacza częstotliwość pojawiania się pacjenta(questionmark.gif). np 4 oznacza raz na cztery tygodnie.

--edit
Chyba że potrzebujesz, żeby było to raz w miesiącu w pierwszy poniedziałek(zawsze!) ( w przypadku kwietnia 07-04-2014 ). Wtedy musisz sprawdzić czy wygenerowana data jest w odpowiednim miesiącu i w razie błędu przesunąć ją o tydzień wink.gif
Geston
Raczej logiczniejsza jest opcja druga. Natomiast zastanawia mnie co jeżeli taki pacjent ma mieć wizytę w każdy pierwszy i piąty czwartek miesiąca. I według wyjaśnień autora, przykładowo ów piąty czwartek kwietnia jest pierwszego maja, jest to zarazem pierwszy czwartek maja, więc wtedy ma jedną wizytę rozumiem?
ghost1511
Tak, podstaw sobie odpowiednie liczby do mojego kodu. W obu przypadkach daje to datę 01-05-2014.

--edit
Przy czym na przykład luty nigdy nie będzie miał 5 tygodnia dlatego uważam, że raczej powinno się ustalić częstotliwość wizyt.
Geston
Wersja uniwersalna z własnym sterowaniem tak aby dopasować dokładnie do potrzeb.

  1. <?php
  2.  
  3. function getMyDate($day, $week, $mon, $year) {
  4.  
  5. // flagi
  6. $w = 0;
  7. $set = false;
  8.  
  9. // określanie liczby dni w danym miesiącu żeby uzyskać odpowiednią liczbę przebiegów pętli for
  10. $x = date("t", mktime(0, 0, 0, $mon+1, 0, $year));
  11.  
  12. for($i=1, $j=1; $i<=$x+7; $i++) {
  13.  
  14. // jeżeli $i przekroczyło $x - przechodzimy do kolejnego miesiąca
  15. if($i > $x && !$set) {
  16. $mon = $mon + 1;
  17. $j = 1;
  18. $set = true;
  19. }
  20.  
  21. // przepisanie daty na format timestamp - dla $j = 1 - data pierwszego dnia miesiąca
  22. $date = mktime(0, 0, 0, $mon, $j, $year);
  23.  
  24. // inkrementacja drugiej zmiennej
  25. $j++;
  26.  
  27. // wyciągnięcie z daty numeru dnia (1 - poniedziałek, 7 - niedziela)
  28. $day_num = date("N", $date);
  29.  
  30. // jeżeli dzień wyciągnięty z daty jest tym samym dniem co dzień szukany - zwiększamy $w o 1
  31. if($day_num == $day) $w = $w + 1;
  32.  
  33. // gdy $w (numer powtórzenia danego dnia w miesiącu) jest równy szukanemu - wyrzucamy datę
  34. if($w == $week) {
  35. $date = date("d-m-Y", $date);
  36. break;
  37. }
  38. }
  39.  
  40. return $date;
  41. }
  42.  
  43. // wyświetl datę wtorku - trzeciego w miesiącu czerwcu roku 2014
  44. echo getMyDate(2,3,6,2014);
  45.  
  46. ?>
ghost1511
Cytat(Geston @ 11.04.2014, 10:23:21 ) *
Wersja uniwersalna z własnym sterowaniem tak aby dopasować dokładnie do potrzeb.

  1. <?php
  2.  
  3. function getMyDate($day, $week, $mon, $year) {
  4.  
  5. // flagi
  6. $w = 0;
  7. $set = false;
  8.  
  9. // określanie liczby dni w danym miesiącu żeby uzyskać odpowiednią liczbę przebiegów pętli for
  10. $x = date("t", mktime(0, 0, 0, $mon+1, 0, $year));
  11.  
  12. for($i=1, $j=1; $i<=$x+7; $i++) {
  13.  
  14. // jeżeli $i przekroczyło $x - przechodzimy do kolejnego miesiąca
  15. if($i > $x && !$set) {
  16. $mon = $mon + 1;
  17. $j = 1;
  18. $set = true;
  19. }
  20.  
  21. // przepisanie daty na format timestamp - dla $j = 1 - data pierwszego dnia miesiąca
  22. $date = mktime(0, 0, 0, $mon, $j, $year);
  23.  
  24. // inkrementacja drugiej zmiennej
  25. $j++;
  26.  
  27. // wyciągnięcie z daty numeru dnia (1 - poniedziałek, 7 - niedziela)
  28. $day_num = date("N", $date);
  29.  
  30. // jeżeli dzień wyciągnięty z daty jest tym samym dniem co dzień szukany - zwiększamy $w o 1
  31. if($day_num == $day) $w = $w + 1;
  32.  
  33. // gdy $w (numer powtórzenia danego dnia w miesiącu) jest równy szukanemu - wyrzucamy datę
  34. if($w == $week) {
  35. $date = date("d-m-Y", $date);
  36. break;
  37. }
  38. }
  39.  
  40. return $date;
  41. }
  42.  
  43. // wyświetl datę wtorku - trzeciego w miesiącu czerwcu roku 2014
  44. echo getMyDate(2,3,6,2014);
  45.  
  46. ?>


Tutaj należałoby sprawdzić jak sobie funkcje dat radzą z latami przestępnymi itp. dziwactwami czasu . Obiekt DateTime jest odporny na takie rzeczy i raczej jego lepiej stosować do operacji na datach. Do tego dochodzą strefy czasowe i łatwiejsze operacje (takie jak odejmowanie dodawanie itp). Ale jeżeli się mylę to proszę o poprawienie wink.gif

--edit
Czuję że tutaj nospor może mieć coś do powiedzenia wink.gif
Geston
$date() z mktime() przyjmuje miesiąc i rok i zwraca odpowiednią liczbę dni dla danego miesiąca uwzględniając lata przestępne.

Co do strefy czasowej, bez jej określenia domyślnie czas jest pobierany z tego ustawionego na serwerze. Jeżeli pacjent zgłaszałby się do rejestracji która jest w innej strefie czasowej niż serwer to ok, ale w tym przypadku wystarczy dodać:

  1. date_default_timezone_set('Europe/Warsaw');


I po kłopocie.
nospor
Cytat
Czuję że tutaj nospor może mieć coś do powiedzenia
Funkcje dat radzą sobie bez problemu z latami przestepnymi itp. DateTime jest oparty pewnie na tym samym silniku do wyliczania dat - tu wiec nie ma roznicy. Strefy czasowe pewnie nie interesują teraz autora, wiec tez nie ma roznicy.
Co nie zmienia faktu ze uzywanie DateTime docelowo jest przyjemniejsze. Tez kiedys operowalem tylko na date() ale musialem sie swego czasu przerzucic wlasnie na strefy czasowe. Okazalo się że DateTime jest bardzo przyjemne w uzywaniu smile.gif
djgarsi
Witam. Mam trochę inny problem. Otóż mam w bazie zapisywany numer tygodnia i chciałbym pokazać jakoś datę np. poniedziałku z 15 tygodnia roku. Jest taka możliwość?
ghost1511
Przecież wszystko jest powyżej smile.gif
celbarowicz
Najlepiej jak osobiście opracujesz funkcję wyznaczającą datę danego dnia na podstawie roku i numeru tygodnia.
Bowiem:
0-----52-----2017-01-01-----0
oraz
364-----52-----2017-12-31-----0.
Oznaczenia:
nrdnia wroku----nr tygodnia----data R_M_D----dzień tygodnia.
0-niedziela
1-poniedziałek
itd
Chyba.że ktoś własnym sposobem numerował tygodnie.
Niektóre lata mają nawet 53 tygodnie.

  1. echo '<br>';
  2. $rok='2005';
  3. echo $data=$rok.'-01-01';echo '----->';//$n numer dnia tygodnia
  4. echo $n=date("w",strtotime($data));echo '----->';echo $n=date("W",strtotime($data));echo '<br>';
  5. //--------------------------------------------------------------------------------------------------
  6. $rok='2006';
  7. echo $data=$rok.'-01-01';echo '----->';//$n numer dnia tygodnia
  8. echo $n=date("w",strtotime($data));echo '----->';echo $n=date("W",strtotime($data));echo '<br>';
  9.  
  10.  


Z matematycznego punktu widzenia nie jest to funkcja bowiem jednemu argumentowi (2017 ,52) przyporządkowane są dwie wartości ->(01-01--->0)oraz(31-12--->)
Zamiast nazwy funkcja lepiej uzywaćquestionmark.gif

Przetestuj to:
  1. <?php
  2. function szukaj($rok,$n,$dzientygodnia){
  3.  
  4. $data=$rok.'-01-01';
  5. $datakoncowa=$rok.'-12-31'; $iledniwroku = date("z",( strtotime("$datakoncowa")));
  6. $nx=0;
  7. $dni=-1;
  8. while (($dni<$iledniwroku )){
  9. $dni=$dni+1;
  10. $nx = date("W",( strtotime("$data +$dni day")));
  11. $kolejnadata=date("Y-m-d",( strtotime("$data +$dni day")));
  12. $dzientyg= date("w",( strtotime("$data +$dni day")));
  13.  
  14. if(($nx==$n)and($dzientygodnia==$dzientyg)){ echo $nx;
  15. echo '-----';
  16. echo $dzientyg;
  17. echo '-----';
  18. echo $kolejnadata;
  19. echo '<br>';
  20. }
  21. }
  22. }
  23. //-----------------------------------------------------------
  24. $rok=2014; //zmień
  25. $nrtygodnia=52; //zmień
  26. $dzien=3; //zmień
  27. szukaj($rok,$nrtygodnia,$dzien);
  28. ?>
  29.  
  30.  
  31.  
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.