Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Data
Forum PHP.pl > Forum > Przedszkole
ZZ
Witam,
mam nastepujacy problem z uzyskaniem daty:
znam:

- numer dnia (0..6)
np: $ndzien=1;
- numer tygodnia (1..52 zalezne od roku)
np: $ntyg=8;
- rok (wiadomo)
np: $rok=date('Y');

Potrzebowalbym daty w danym tygodniu i za dany dzien.
mialby poprostu zwrocic '21-02-2005'
Ma ktos jakis pomysl jak tego dokonac? Bo ja juz zglupialem
Pozdrawiam
dr_bonzo
Manual > Funkcja date()
Guest
no to zeczywiscie odkrywcze, myslisz ze nie przegladalem? niestety nie moge dojsc jak z tego wybrnac.
ARJ
http://pl2.php.net/manual/pl/function.date.php
podrozdział 4. Zastosowania date().
Kuziu
Widzicie że on ma podany

Dzień, numer tygodnia i rok ?
ZZ
eghhh to ma byc pomoc dla poczatkujacych :-P
takie odpowiedzi to ja znam... chodzilo mi o naprowadzenie na temat a nie odpowiedzi tylu zobacz sobie opis date()...
przeczytajcie dokladnie pytanie... gdyby to bylo proste to sam bym zrobil.
Kuziu
  1. <?php
  2.  
  3. $rok = 2005;
  4. $tydzien = 8;
  5. $mojdzien = 1;
  6.  
  7. $pierwszyDzien = date(&#092;"w\",mktime(1,1,1,1,1,$rok)); // sprawdzamy jaki dzień przypadł 1 stycznia
  8. $pierwszyDzien--;
  9.  
  10. if($rok % 4 == 0){ // czy jest to rok przestępny questionmark.gif
  11.  $iloscDniLutego = 29;
  12. }else{
  13.  $iloscDniLutego = 28;
  14. }
  15.  
  16. $miesiace = Array(31,$iloscDniLutego,31,30,31,30,31,31,30,31,30,31);
  17.  
  18. $iloscDni = $tydzien*7;
  19. $miesiac = 1;
  20.  
  21. for($i=0;$i<12;$i++){
  22.  if($iloscDni > $miesiace[$i]){
  23.   $iloscDni = $iloscDni - $miesiace[$i];
  24.   $miesiac++;
  25.  }
  26. }
  27.  
  28. $dzien = $iloscDni - $pierwszyDzien + $mojdzien;
  29.  
  30. echo($dzien . ' - ' . $miesiac . ' - ' . $rok);
  31.  
  32. ?>


Chyba wszystko śmiga jak należy guitar.gif
zz
dzieki bardzo o to mi wlasnie chodzilo :-)
VGT
Może to już nie aktualne ale na wszelki wypadek jeszcze dodam coś od siebie.

Nie przestudiowałem całego skryptu, więc nie wiem czy nieprawidłowa ilość dni lutego może spowodować błędne działanie, ale jeśli tak to ten fragment:
  1. <?php
  2.  
  3. if($rok % 4 == 0){ // czy jest to rok przestępny questionmark.gif
  4. $iloscDniLutego = 29;
  5. }else{
  6. $iloscDniLutego = 28;
  7. }
  8.  
  9. ?>


wymaga poprawek.

Z dawnych czasów jeszcze w C++ miałem funkcję zwracającą ilość dni miesiąca, którą przerobiłem na potrzeby php. Nie jestem w stanie aktualnie podać, skąd źródło informacji o tym, kiedy ile dni ma luty, ale wtedy byłem tego pewien na 100% więc informacje chyba były pewne.

funkcja wygląda tak:

  1. <?php
  2.  
  3. Function daysinmonth($year, $month) 
  4. {
  5. if ($month==1) $dni=31;
  6. if ($month==2)
  7. {
  8.     if (($year % 4) == 0)
  9.     {
  10.         if (($year % 100)==0)
  11.         {
  12.             if (($year % 400)==0) $dni=29; else $dni=28;
  13.         } else $dni=29;
  14.     }
  15.     else $dni=28;
  16. }
  17. if ($month==3) $dni=31;
  18. if ($month==4) $dni=30;
  19. if ($month==5) $dni=31;
  20. if ($month==6) $dni=30;
  21. if ($month==7) $dni=31;
  22. if ($month==8) $dni=31;
  23. if ($month==9) $dni=30;
  24. if ($month==10) $dni=31;
  25. if ($month==11) $dni=30;
  26. if ($month==12) $dni=31;
  27.  
  28. return $dni;
  29. }
  30. ?>


Ten fragment z lutym trzeba oczywiście przerobić, aby dostosować do powyższego skryptu, mi chodzi jedynie o algorytm - ilość dni w lutym zależy od jeszcze kilku czynników, nie tylko od tego czy rok jest podzielny przez 4
Kuziu
Od jakich ? Rok przestepny jest co 4 lata i tyle.

a tak btw. to po co pisać 12 if'ów if($month==1) if....

jak można dac 1 tablice i robić

  1. <?php
  2.  
  3. $miesiace = Array(31,$iloscDniLutego,31,30,31,30,31,31,30,31,30,31);
  4.  
  5. $miesiac[$numer];
  6.  
  7. ?>
VGT
Cytat(Kuziu @ 2005-02-28 13:40:56)
Od jakich ? Rok przestepny jest co 4 lata i tyle.

Spójrz na algorytm do lutego w moim skrypcie, to otrzymasz odpowiedz na pytanie "od jakich"

poszukałem aby potwierdzić to co piszę:

http://pl.wikipedia.org/wiki/Rok_przestępny
Kuziu
No racja ...

ale 1 doba na 2620 lat to chyba w kalendarzu z aktualną datą się nie przyda ....
VGT
Nie określono, jakie daty ten skrypt ma uzyskiwać..
Może np chodzić o jakieś daty historyczne, przy których to już może mieć znaczenie i dlatego wolałem się do tego szczegółu przyczepić winksmiley.jpg

A taki błąd jaki podajesz (2620 lat) jest właśnie PO wprowadzeniu tych korekt. Bez nich (29 dni co 4 lata) błąd 1 doby pojawia się co 128 lat smile.gif

Oczywiście cała ta różnica dla skryptu nie ma znaczenia, gdyż jest to różnica względem kalendarza astronomicznego.

Dla skryptu miałoby znaczenie (pojawiła by się różnica 1 dnia) jeśli trafiłoby na rok, dla którego twoja funkcja poda 29 dni, a tak na prawde powinno być 28 dni.
Kuziu
Dat historycznych i tak nie otrzymasz za pomocą funkcji time() więc ...

... ale oczywiście mój błąd ... z tym, ze w tym wypadku nie taki ważny tongue.gif
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.