Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe PHP

W jakim formacie będzie wyświetlona data po uruchomieniu przedstawionego kodu?

<?php
    echo date('l, dS F Y');
?>
A. Monday, 10th July 17
B. Monday, 10 July 2017
C. Monday, 10th July 2017
D. 10, Monday July 2017

Pytanie z egzaminu CKE, styczeń 2019 (arkusz E.14-X-19.01).

Wynik wynika bezpośrednio z formatu przekazanego do funkcji date() w PHP. Zapis date('l, dS F Y') składa się z kilku specjalnych znaków formatujących. Litera l oznacza pełną angielską nazwę dnia tygodnia, czyli na przykład Monday. Przecinek i spacje są traktowane dosłownie, więc pojawią się w wyniku dokładnie w tych miejscach. Symbol d oznacza dzień miesiąca zapisany jako dwie cyfry, np. 10 albo 05. Symbol S dodaje angielski przyrostek porządkowy, czyli st, nd, rd albo th, dlatego dla 10 dostajemy 10th. Litera F oznacza pełną angielską nazwę miesiąca, np. July, a Y oznacza pełny, czterocyfrowy rok, czyli 2017. Dlatego format odpowiada zapisowi: Monday, 10th July 2017. W praktyce warto pamiętać, że date() używa aktualnej daty i strefy czasowej serwera, jeśli nie podamy drugiego argumentu z timestampem. W dobrym kodzie produkcyjnym często ustawia się strefę czasową przez date_default_timezone_set(), a dane w bazie przechowuje raczej w formacie neutralnym, np. ISO 8601 lub UTC, dopiero potem formatując je dla użytkownika. Moim zdaniem to jest jedna z tych funkcji PHP, które wyglądają banalnie, ale łatwo się pomylić na pojedynczej literce.
W tym pytaniu kluczowe jest rozróżnienie, które znaki w napisie formatującym są zwykłym tekstem, a które są specjalnymi symbolami funkcji date() w PHP. Kod nie wypisuje daty w dowolnej kolejności, tylko dokładnie według wzorca l, dS F Y. Jeżeli wynik zaczynałby się od liczby dnia, na przykład 10, Monday July 2017, to format musiałby zaczynać się od d albo j, a nie od l. Tutaj pierwszym elementem jest pełna nazwa dnia tygodnia, więc zapis startuje od Monday. Brak przyrostka th też byłby pomyłką, bo po d występuje S, a ten symbol odpowiada za angielski przyrostek liczebnika porządkowego. Zapis Monday, 10th July 17 miesza z kolei dwa różne symbole roku: małe y daje rok dwucyfrowy, czyli 17, natomiast wielkie Y daje rok czterocyfrowy, czyli 2017. To częsty błąd, bo w PHP wielkość liter w formacie daty ma znaczenie. Zapis Monday, 10 July 2017 wygląda blisko poprawnego, ale pomija S, więc nie pokazuje formy 10th. Warto też zauważyć, że PHP date() domyślnie zwraca nazwy dni i miesięcy po angielsku, a nie po polsku. Jeśli aplikacja ma działać lokalnie dla użytkowników z Polski, lepszą praktyką bywa użycie IntlDateFormatter albo innego mechanizmu lokalizacji. Samo date() jest dobre do prostych formatów technicznych, ale trzeba bardzo uważnie czytać każdy znak wzorca.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.