Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dzisiaj jest...
Forum PHP.pl > Forum > Przedszkole
bushaya
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.
Matimor
  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>
bushaya
Dzięki, ale nie chodziło mi o użycie js. Chcę tylko otrzymać odpowiedź na moje pytanie.
Void
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
Wicepsik
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')];



bushaya
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?
Void
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).
Wicepsik
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.
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.