Program PHP wyświetla aktualny czas w postaci godzina:minuta:sekunda, np. 15:38:20. Czas sformatowany w ten sposób zostanie zwrócony przez funkcję
A.
time("G:m:s");
B.
date("H:i:s");
C.
date("G:m:s");
D.
time("H:i:s");
Pytanie z egzaminu CKE, styczeń 2022 (arkusz EE.09-SG-22.01).
Funkcja date('H:i:s') jest właściwa, bo w PHP to właśnie date() służy do formatowania daty i czasu jako tekstu. Jeżeli nie podasz drugiego argumentu, PHP automatycznie użyje aktualnego czasu serwera, czyli bieżącego znacznika czasu. Format H:i:s oznacza kolejno: H — godzinę w formacie 24-godzinnym z zerem wiodącym, czyli od 00 do 23, i — minuty od 00 do 59, s — sekundy od 00 do 59. Dzięki temu wynik może wyglądać np. 15:38:20 albo 07:05:09. W praktyce takie formatowanie stosuje się przy wyświetlaniu czasu logowania, godziny dodania wpisu, czasu wykonania operacji albo informacji w panelu administracyjnym. Moim zdaniem warto od razu zapamiętać, że w PHP format daty zależy od liter, a wielkość liter ma znaczenie. Dobrą praktyką jest też ustawienie strefy czasowej, np. przez date_default_timezone_set('Europe/Warsaw'), bo inaczej serwer może zwracać czas w innej strefie niż oczekujesz.
W tym pytaniu łatwo pomylić dwie różne rzeczy: pobranie znacznika czasu oraz jego sformatowanie do czytelnej postaci. Funkcja time() w PHP nie formatuje daty ani godziny. Ona zwraca liczbę całkowitą, czyli tak zwany timestamp Uniksa, oznaczający liczbę sekund od 1 stycznia 1970 roku. Dlatego zapis w stylu time('H:i:s') nie ma sensu jako sposób na uzyskanie godziny:minuty:sekundy. W nowszych wersjach PHP przekazanie argumentu do funkcji, która go nie oczekuje, może skończyć się ostrzeżeniem albo błędem, więc to nie jest tylko drobna różnica kosmetyczna. Druga częsta pułapka dotyczy liter w formacie funkcji date(). Litera i oznacza minuty, natomiast m oznacza miesiąc z zerem wiodącym, np. 01, 02, 12. Zapis date('G:m:s') zwróci godzinę bez zera wiodącego, potem numer miesiąca, a dopiero potem sekundy. Może to wyglądać podobnie, szczególnie gdy numer miesiąca przypadkiem zgadza się z minutą, ale technicznie wynik jest błędny. Również G nie jest tym samym co H, bo G podaje godzinę od 0 do 23 bez zera wiodącego. Gdy wymagany jest stały zapis typu 15:38:20 albo 07:05:09, trzeba użyć H:i:s. Z mojego doświadczenia najlepiej kojarzyć date() z prezentacją czasu dla użytkownika, a time() z obliczeniami, porównywaniem terminów i zapisem czasu w bazie danych.