Typy danych cz. 3: Wartości daty i czasu

W arkuszu kalkulacyjnym możemy wprowadzać do komórek wartości daty i czasu. Także formatować istniejące wartości jako data i czas i wykonywać na nich obliczenia. Potrzeba wykonywania operacji na datach i godzinach bierze się stąd, że ludziom (nie tylko użytkownikom arkusza kalkulacyjnego) trudno jest wyznaczać w pamięci np. datę różną o 100 dni w przyszłości lub przeszłości od obecnej, albo czas różny o 11 godzin i 37 minut od wskazanego. Przyczyną tego jest oczywiście różna liczba dni w miesiącach i system czasu bazujący na 24 godzinach doby, 60 minutach i sekundach itp.

Wewnętrzna reprezentacja daty i czasu w komórce

Aby zrozumieć sposób działania funkcji operujących na dacie i czasie, konieczne jest zrozumienie wewnętrznej reprezentacji tych wartości w komórce. Można to sprawdzić eksperymentalnie – wpisać np. dzisiejszą datę do komórki (Excel ją prawidłowo rozpozna jeśli wpisana jest zgodnie z ustawieniem formatu daty w systemie operacyjnym – może to być np. „12.03.2020” lub „2020-03-12” itp.), a następnie sformatować komórkę jako liczbę z miejscami dziesiętnymi. Zobaczymy wartość np. „43902,00”. Data jest więc w rzeczywistości pewną liczbą całkowitą. Można też zrobić odwrotnie – wpisać do komórki liczbę „1” i sformatować jako datę. Zobaczymy w komórce datę „01.01.1900”.
W rzeczywistości data jest więc liczbą całkowitą: liczbą dni, jakie minęły od pewnej daty zerowej (tzw. początek epoki Excela).

Podobnie czas – do komórki arkusza można go wpisać w postaci np. „12:34” lub „12:34:56” lub razem z datą, np. „12.03.20 12:34” i przekonać się eksperymentując w podobny sposób jak z datą. Okaże się, że czas jest częścią ułamkową – frakcją doby (która cała ma wartość 1). Wartość dziesiętna 0,5 oznacza więc dokładnie południe (nie wiadomo którego dnia), a wartość 43902,25 to 6 rano (1/4 doby, czyli 0,25) dnia 12.03.2020.
Taka liczba, w której część całkowita odpowiada dacie, a ułamkowa to czas (przy czym jeden z tych komponentów może nie wystąpić – mamy wówczas tylko datę lub tylko czas), w terminologii Excela zwana jest „liczbą kolejną”.

Wykonywanie obliczeń z użyciem daty i czasu

Dzięki wewnętrznej reprezentacji daty – liczby całkowitej dni, możliwe jest np. łatwe wyznaczanie dat w przyszłości lub przeszłości bez użycia funkcji – wystarczy dodać lub odjąć całkowitą liczbę dni od komórki z datą. W Excelu jest także kilkanaście ważnych funkcji, które służą do pracy z datami i godzinami (w grupie Formuły / Data i godzina).

Niektóre funkcje w grupie Data i godzina

DZIŚ() i podobna TERAZ() – te dwie funkcje zwracają odpowiednio bieżącą datę systemową komputera oraz bieżącą datę i czas zegara systemowego, jako wartość liczbową („liczbę kolejną”). Pierwsza z nich zwraca zatem liczbę całkowitą (datę), a druga rzeczywistą (całkowitą datę i ułamkową jako czas). Nie istnieje funkcja zwracająca sam bieżący czas, ale wyznaczenie tego jest proste – należy np. od wartości funkcji TERAZ odjąć wartość DZIŚ (część całkowitą).
DATA(rok; miesiąc; dzień) – zwraca „liczbę kolejną” daty z podanych w argumentach składników. Np. DATA(2020; 3; 12) zwróci liczbę 43902, którą można sformatować w komórce jako datę i wyświetlić np. „12.03.20”.
CZAS(godziny; minuty; sekundy) – podobnie jak DATA, funkcja zwraca liczbę kolejną w części ułamkowej, czyli czas.
DATA.WARTOŚĆ(tekst) i CZAS.WARTOŚĆ(tekst) – zwracają liczbę
ROK(…), MIESIĄC(…), DZIEŃ(…), GODZINA(…), MINUTA(…), SEKUNDA(…) – funkcje przyjmują jeden argument – liczbę kolejną, np. komórkę z datą/czasem i zwracają składnik daty lub czasu (zgodnie z nazwą). Możemy w ten sposób wydobyć element daty/czasu z liczbowej reprezentacji wewnętrznej, np. po to aby wyznaczyć ile lat jest pomiędzy dwiema datami, zapisując =ROK(A2)–ROK(A1).
DZIEŃ.TYG(liczba_kolejna; typ) – zwraca dzień tygodnia w postaci numeru kolejnego, np. 1 dla poniedziałku, 2 dla wtorku itd. (należy jak argument typ podać 2, ponieważ domyślnie zwracany jest dzień tygodnia w kolejności amerykańskiej, gdzie 1 to niedziela.
DNI.ROBOCZE(…), DNI.ROBOCZE.NIESTAND(…), DZIEŃ.ROBOCZY(…) – zwracają liczbę dni roboczych pomiędzy datami lub kolejny dzień roboczy po pewnej liczbie dni – z uwzględnieniem weekendów i świąt.

Funkcji jest więcej i mają szerokie zastosowanie przy manipulowaniu datami i czasem. Jak już wspomniano, aby wyznaczyć ile dni minęło pomiędzy dwiema datami, wystarczy odjąć dwie komórki z datami od siebie. Dla dni takie obliczenia plus/minus są proste, bo to wynika z natury „liczby kolejnej” Excela. Ale już aby wyznaczyć datę np. 5 miesięcy (nie dni) w przyszłości, z uwzględnieniem różnej liczby dni w miesiącach roku, nie wystarczy operować dniami. Konieczne jest zdekomponowanie daty (liczby kolejnej) na składniki, dodanie 5 do liczby miesięcy i zbudowanie liczby kolejnej od nowa. Np. dla komórki A1 z datą bazową, do której trzeba dodać 5 miesięcy, formuła miałaby postać
=DATA(ROK(A1); MIESIĄC(A1)+5; DZIEŃ(A1))
Co ciekawe, Excel dobrze poradzi sobie z sytuacją przekroczenia miesiąca powyżej wartości 12, zwiększając odpowiednio rok w dacie wynikowej.