Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]PHP nie zna daty 25.03.2012
mambus
post
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 30.11.2010

Ostrzeżenie: (0%)
-----


Witajcie !
chce mi się śmiać - bo jakbym nie kombinował - tak PHP w żaden sposób do mojego napisanego kalendarza, nie jest w stanie "wypluć" dnia 25.03.2012 - wycina go po prostu. Kalendarz sypie się do momentu właśnie gdy powinien pojawić się 25.03.2012 - później dziala. Nie mam pojęcia czemu, walcze 2 dzień, znajomi patrzyli - naprawdę nic nie wiemy, może ktoś z Was widzi błąd questionmark.gif?

  1. function kalendarz($fix)
  2. {
  3. if($fix > 16) return "<div style='color: #ff0033: Możesz maksymalnie z wyprzedzeniem <b><u>16 tygodni</u></b> !'></div>";
  4. else
  5. {
  6.  
  7. $day = 86400;
  8.  
  9. if(date("N")==1)
  10. {
  11. $ret[0] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix);
  12. $ret[1] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + $day);
  13. $ret[2] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 2*$day);
  14. $ret[3] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 3*$day);
  15. $ret[4] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 4*$day);
  16. $ret[5] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 5*$day);
  17. $ret[6] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 6*$day);
  18. }
  19. elseif(date("N")==2)
  20. {
  21. $ret[0] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - $day);
  22. $ret[1] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix);
  23. $ret[2] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + $day);
  24. $ret[3] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 2*$day);
  25. $ret[4] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 3*$day);
  26. $ret[5] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 4*$day);
  27. $ret[6] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 5*$day);
  28. }
  29. elseif(date("N")==3)
  30. {
  31. print $fix."&nbsp;";
  32. $ret[0] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 2*$day);
  33. $ret[1] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - $day);
  34. $ret[2] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix);
  35. $ret[3] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + $day);
  36. $ret[4] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 2*$day);
  37. $ret[5] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 3*$day);
  38. $ret[6] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 4*$day);
  39. }
  40. elseif(date("N")==4)
  41. {
  42. $ret[0] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 3*$day);
  43. $ret[1] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 2*$day);
  44. $ret[2] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - $day);
  45. $ret[3] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix);
  46. $ret[4] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + $day);
  47. $ret[5] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 2*$day);
  48. $ret[6] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 3*$day);
  49. }
  50. elseif(date("N")==5)
  51. {
  52. $ret[0] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 4*$day);
  53. $ret[1] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 3*$day);
  54. $ret[2] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 2*$day);
  55. $ret[3] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - $day);
  56. $ret[4] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix);
  57. $ret[5] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + $day);
  58. $ret[6] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + 2*$day);
  59. }
  60. elseif(date("N")==6)
  61. {
  62. $ret[0] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 5*$day);
  63. $ret[1] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 4*$day);
  64. $ret[2] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 3*$day);
  65. $ret[3] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 2*$day);
  66. $ret[4] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - $day);
  67. $ret[5] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix);
  68. $ret[6] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix + $day);
  69. }
  70. elseif(date("N")==7)
  71. {
  72. $ret[0] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 6*$day);
  73. $ret[1] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 5*$day);
  74. $ret[2] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 4*$day);
  75. $ret[3] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 3*$day);
  76. $ret[4] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - 2*$day);
  77. $ret[5] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix - $day);
  78. $ret[6] = date("d-m-Y", strtotime(date("d-m-Y")) + ($day*7)*$fix);
  79. }
  80. return $ret;
  81. }
  82. }
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


  1. echo '<pre>';
  2. var_dump(kalendarz(-1)); // poprzedni tydzień (a tam dzień 25 marzec 2012)
  3. var_dump(kalendarz(0)); // obecny tydzień
  4. var_dump(kalendarz(1)); // przyszły tydzień

Czy to aby na pewno jest Twoja funkcja, skoro nie potrafisz z niej korzystać?
Go to the top of the page
+Quote Post
Necsord
post
Post #3





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Kojarzysz może co było 25 marca? smile.gif Jakaś zmiana w życiu polaczków ? Jak ciągle nie przychodzi tobie nic do głowy to dodaj w date parametr I ( duże i ) i dump'nij sobie kalendarz(-1) i kalendarz(0). Jeżeli chodzi o odpowiedz to przeczytaj manual'a masz nawet w przykładach.

Ten post edytował Necsord 28.03.2012, 22:54:55
Go to the top of the page
+Quote Post
mambus
post
Post #4





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 30.11.2010

Ostrzeżenie: (0%)
-----


no moja funkcja... nie rozumiem pytania. Wykorzystuje podobną i działa. Na potrzeby innego projektu tą zmodyfikowałem i nie wiem dlaczego nie działa 25.03.2012.
Go to the top of the page
+Quote Post
mortus
post
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Cytat(mambus @ 28.03.2012, 23:54:26 ) *
no moja funkcja... nie rozumiem pytania. Wykorzystuje podobną i działa. Na potrzeby innego projektu tą zmodyfikowałem i nie wiem dlaczego nie działa 25.03.2012.

To może pokaż kod, jak ją wykorzystujesz?
Go to the top of the page
+Quote Post
mambus
post
Post #6





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 30.11.2010

Ostrzeżenie: (0%)
-----


  1.  
  2. for ($c=-3; $c<4; $c++)
  3. {
  4. $row=kalendarz($c);
  5. }


Potrzebuje mieć dzisiejszy dzień w połowie kalendarza i mam.

Już dump-uje. Domyślam się że chodzi o zmianę czasu... ?
Go to the top of the page
+Quote Post
mortus
post
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Cytat(mambus @ 29.03.2012, 00:00:19 ) *
Potrzebuje mieć dzisiejszy dzień w połowie kalendarza i mam.

To tylko przypadek, bo zadaniem funkcji jest pokazywanie całych tygodni (od poniedziałku do piątku) wstecz, do przodu oraz obecnego tygodnia. To, że środa/czwartek są mniej więcej w połowie tygodnia to żadna nowość. Funkcja działa tak, jak ma działać:



No chyba, że nie o tej funkcji mówimy, co trzeba.

Ten post edytował mortus 28.03.2012, 23:14:43
Go to the top of the page
+Quote Post
mambus
post
Post #8





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 30.11.2010

Ostrzeżenie: (0%)
-----


@Mortus, tak, ale u mnie pomija 25-03-2012 i przeskakuje dalej. Kombinuje i po ustawieniu
  1. date_default_timezone_set('America/Los_Angeles');
jest 25-03-2012 ale ucina 11-03-2012. Ppo ustawieniu Warszawy - ucina 25. Ja manual czytałem, naprwde - ja tego nie rozumiem zwyczajnie. 25go zmienił się czas na letni. Ale jak mam to odnieść w kodzie ?
Go to the top of the page
+Quote Post
Necsord
post
Post #9





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


W manualu date masz jak byk napisane:
Cytat
This can be more reliable than simply adding or subtracting the number of seconds in a day or month to a timestamp because of daylight saving time.


Innymi słowy masz używać funkcji mktime do dodawania / odejmowania dni, godzin itd lub klasy DateTime dla PHP 5.2.0+.

Ten post edytował Necsord 28.03.2012, 23:38:39
Go to the top of the page
+Quote Post
mortus
post
Post #10





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


W najnowszej wersji PHP (bo takową posiadam) było sporo poprawek związanych z funkcją date() i stąd (podejrzewam) różnica w działaniu. Użyj mktime() lub klasy DateTime, jak radzi Necsord.
Go to the top of the page
+Quote Post
mambus
post
Post #11





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 30.11.2010

Ostrzeżenie: (0%)
-----


Jasne, już czaje, dzięki. W moim "archaicznym" rozwiązaniu pomogło ustawienie default_time_zone na ZULU.

Zastosuje się do porad - dzięki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 21:53