Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Dzisiaj jest..., prosty skrypt
bushaya
post 20.09.2009, 20:33:29
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.08.2009

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


Witam, po przeczytaniu pewnego rozdziału w książce postanowiłem napisać swój pierwszy skrypcik. Mam jednak mały problem, Kiedy zmieniałem nazwe dnia tygodnia z angielskiego na polski za pomocą date("l"), jako dzień dzisiejszy (niedziela) pokazywało poniedziałek. Chyba chodzi o to, że ta funkcja (l) interpretuje niedzielę jako 0 a sobotę jako 6 dzień tygodnia, lecz nie jestem pewien. Oto skrypty:

Cytat
<?php
$nazwa_dnia = date("l");
$dzien = date("d");
$miesiac = date("m");
$rok = date("Y");
echo "Dzisiaj jest ";
if ($nazwa_dnia = "Monday") {
echo "Poniedziałek";
} elseif ($nazwa_dnia = "Tuesday") {
echo "Wtorek";
} elseif ($nazwa_dnia = "Wednesday") {
echo "Środa";
} elseif ($nazwa_dnia = "Thursday") {
echo "Czwartek";
} elseif ($nazwa_dnia = "Friday") {
echo "Piątek";
} elseif ($nazwa_dnia = "Saturday") {
echo "Sobota";
} elseif ($nazwa_dnia = "Sunday") {
echo "Niedziela";
}
echo ", ".$dzien." ";
if ($miesiac == "01") {
echo "Stycznia ";
} elseif ($miesiac == "02") {
echo "Lutego";
} elseif ($miesiac == "03") {
echo "Marca";
} elseif ($miesiac == "04") {
echo "Kwietnia";
} elseif ($miesiac == "05") {
echo "Maja";
} elseif ($miesiac == "06") {
echo "Czerwca";
} elseif ($miesiac == "07") {
echo "Lipca";
} elseif ($miesiac == "08") {
echo "Sierpnia";
} elseif ($miesiac == "09") {
echo "Września";
} elseif ($miesiac == "10") {
echo "Października";
} elseif ($miesiac == "11") {
echo "Listopada";
} elseif ($miesiac == "12") {
echo "Grudnia";
}
echo ", ".$rok;
?>

To jest poprzedni kod z niezadawalającym efektem.

Cytat
<?php
$nazwa_dnia = date("l");
$dzien = date("d");
$miesiac = date("m");
$rok = date("Y");
echo "Dzisiaj jest ";
if ($nazwa_dnia = "Sunday") {
echo "Niedziela";
} elseif ($nazwa_dnia = "Monday") {
echo "Poniedziałek";
} elseif ($nazwa_dnia = "Tuesday") {
echo "Wtorek";
} elseif ($nazwa_dnia = "Wednesday") {
echo "Środa";
} elseif ($nazwa_dnia = "Thursday") {
echo "Czwartek";
} elseif ($nazwa_dnia = "Friday") {
echo "Piątek";
} elseif ($nazwa_dnia = "Saturday") {
echo "Sobota";
}
echo ", ".$dzien." ";
if ($miesiac == "01") {
echo "Stycznia ";
} elseif ($miesiac == "02") {
echo "Lutego";
} elseif ($miesiac == "03") {
echo "Marca";
} elseif ($miesiac == "04") {
echo "Kwietnia";
} elseif ($miesiac == "05") {
echo "Maja";
} elseif ($miesiac == "06") {
echo "Czerwca";
} elseif ($miesiac == "07") {
echo "Lipca";
} elseif ($miesiac == "08") {
echo "Sierpnia";
} elseif ($miesiac == "09") {
echo "Września";
} elseif ($miesiac == "10") {
echo "Października";
} elseif ($miesiac == "11") {
echo "Listopada";
} elseif ($miesiac == "12") {
echo "Grudnia";
}
echo ", ".$rok;
?>


po tym jest zadawalający efekt.
Go to the top of the page
+Quote Post
Matimor
post 20.09.2009, 20:39:58
Post #2





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


  1. <script LANGUAGE="JavaScript">
  2. <!-- Hide it
  3. DayName = new Array(7)
  4. DayName[0] = "niedziela "
  5. DayName[1] = "poniedziałek "
  6. DayName[2] = "wtorek "
  7. DayName[3] = "środa "
  8. DayName[4] = "czwartek "
  9. DayName[5] = "piątek "
  10. DayName[6] = "sobota "
  11.  
  12. MonthName = new Array(12)
  13. MonthName[0] = "stycznia "
  14. MonthName[1] = "lutego "
  15. MonthName[2] = "marca "
  16. MonthName[3] = "kwietnia "
  17. MonthName[4] = "maja "
  18. MonthName[5] = "czerwca "
  19. MonthName[6] = "lipca "
  20. MonthName[7] = "sierpnia "
  21. MonthName[8] = "września "
  22. MonthName[9] = "października "
  23. MonthName[10] = "listopada "
  24. MonthName[11] = "grudnia "
  25.  
  26. function getDateStr(){
  27. var Today = new Date()
  28. var WeekDay = Today.getDay()
  29. var Month = Today.getMonth()
  30. var Day = Today.getDate()
  31. var Year = Today.getFullYear()
  32.  
  33. if(Year <= 99)
  34. Year += 1900
  35.  
  36. return DayName[WeekDay] + "," + " " + Day + " " + MonthName[Month] + ", " + Year
  37. }
  38. //-->
  39. </SCRIPT>
  40.  
  41. <script>document.write("Dzisiaj jest " + getDateStr())</SCRIPT>


Ten post edytował Matimor 20.09.2009, 20:40:24


--------------------
Go to the top of the page
+Quote Post
bushaya
post 20.09.2009, 20:43:00
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.08.2009

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


Dzięki, ale nie chodziło mi o użycie js. Chcę tylko otrzymać odpowiedź na moje pytanie.
Go to the top of the page
+Quote Post
Void
post 20.09.2009, 20:59:07
Post #4





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

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


Po pierwsze: umieszczaj kod PHP w tagach php nie code, jest czytelniejszy smile.gif

Po drugie: przeanalizuj jeszcze raz swój kod i zobacz, co tak na prawdę wykonujesz w instrukcji if:
  1. if ($nazwa_dnia = "Monday") {
  2. echo "Poniedziałek";
  3. } elseif ($nazwa_dnia = "Tuesday") {
  4. echo "Wtorek";
  5. } elseif ($nazwa_dnia = "Wednesday") {
  6. echo "Środa";
  7. } elseif ($nazwa_dnia = "Thursday") {
  8. echo "Czwartek";
  9. } elseif ($nazwa_dnia = "Friday") {
  10. echo "Piątek";
  11. } elseif ($nazwa_dnia = "Saturday") {
  12. echo "Sobota";
  13. } elseif ($nazwa_dnia = "Sunday") {
  14. echo "Niedziela";
  15. }

Za każdym razem zamiast porównywać nazwę dnia z danym łańcuchem PRZYPISUJESZ do niej ten łańcuch (używasz operatora = zamiast ==).

Dlaczego więc dzisiejszy dzień pojawia się jako "Poniedziałek"? Spójrz na pierwszy warunek:
  1. if ($nazwa_dnia = "Monday") {
  2. echo "Poniedziałek";

W wyrażeniu następuje przypisanie ciągu "Monday" do zmiennej $nazwa_dnia. Operator przypisania (=) działa w ten sposób, że po przypisaniu wartości do zmiennej zwraca tą wartość. W tym przypadku wartość "Monday" jest różna od zera (jej wartość logiczna jest więc równa true), podany warunek jest spełniony i wykonywana jest instrukcja echo "Poniedziałek";
W tym przypadku więc bez względu na to jaki jest dzień wykonywany jest pierwszy warunek smile.gif
W drugim kodzie, który podałeś pokazywało dobry dzień zupełnie przypadkowo, bo akurat tam zamieniłeś kolejność (niedziela była na początku). Co ciekawe nazwy miesięcy porównujesz dobrze, więc nie wiem czemu przy dniach zapomniałeś smile.gif

Już tak przy okazji powiem, że do takich celów jak ten została specjalnie stworzona instrukcja switch, ale rozumiem, że do tego jeszcze mogłeś nie dojść w kursie tongue.gif
Go to the top of the page
+Quote Post
Wicepsik
post 20.09.2009, 21:00:20
Post #5





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Przykład lepszego użycia niż ify

  1. $dni = array(1 => 'Poniedziałek', 2 => 'Wtorek', 3 => 'Środa', 4 => 'Czwartek', 5 => 'Piątek', 6 => 'Sobota', 7 => 'Niedziela');
  2. echo 'Dzisiaj jest '.$dni[date('N')];





Ten post edytował Wicepsik 20.09.2009, 21:02:07


--------------------
Go to the top of the page
+Quote Post
bushaya
post 21.09.2009, 15:14:46
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.08.2009

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


Void - Czytałem odnośnie switch, ale myślałem, że ifami będzie prościej. Chyba się myliłem. Dzięki za obszerną odpowiedź. dry.gif

A która funkcja jest bardziej poprawna do tego typu elementów, switch czy array?
Go to the top of the page
+Quote Post
Void
post 21.09.2009, 15:22:49
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

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


W tym przypadku bardziej zwięzłe (i przez to bardziej wydajne) jest chyba użycie tablic, ale obie są poprawne (tak samo poprawne, choć mało wygodne, jest użycie elseif).
Go to the top of the page
+Quote Post
Wicepsik
post 21.09.2009, 15:49:34
Post #8





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Cytat(bushaya @ 21.09.2009, 16:14:46 ) *
A która funkcja jest bardziej poprawna do tego typu elementów, switch czy array?


Sam pomyśl i zobacz który kod jest czytelniejszy, łatwiejszy w edycji ? Tablice to najlepsze rozwiązanie.


--------------------
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:25