Przekształcanie daty do timestamp

PHP

Podane dane przekształcono na timestamp:

Skrypt używa funkcji strtotime() by zakodować datę do formatu timestamp i funkcji date() by przekształcić timestamp do formatu daty. Timestamp jest formatem przedstawiającym ile sekund upłynęło od 1 stycznia 1970 00:00:00. Obecnie mamy 2019-06-16 08:48:16 (1560667696)

mysql

Mysql oferuje funkcje do konwersji daty i czasu.

Do operacji na uniksowym timestampie służą FROM_UNIXTIME() i UNIX_TIMESTAMP().

FROM_UNIXTIME mozna używać w opcjach FROM_UNIXTIME(unix_timestamp,format) i FROM_UNIXTIME(unix_timestamp).


SELECT UNIX_TIMESTAMP();
-- 1221672010

SELECT FROM_UNIXTIME(1221672010);
--2008-09-17 19:20:10

SELECT FROM_UNIXTIME(1221672010,'%Y %m %d %H.%i.%s');
--2008 09 17 19.20.10

Niebezpieczeństwo związane z używaniem w bazie danych unixowego timestampa zamiast daty

Chodzi o sytuację gdy generuje się znacznik czasowy np. funkcją time(), a póżniej trzyma się go w bazie np. jako integer.

Unix timestam określa ile sekund minęło od 1 stycznia 1970 roku (UTC). Zastanówmy się co to oznacza.

Przykładowo gdy timestamp pzyjął wartość np. 3600 to oznacza, że w Londynie była wtedy godzina 01:00 (1 stycznia 1970) bo w zimie Londyn jest w strefie UTC+0. Ale np. Warszawa leży w innej strefie czasowej i 1 stycznia jest to UTC+1, czyli w Warszawie była wtedy godzina 02:00.

Czyli zapisanie timestampa w bazie w postaci integera tak naprawdę nie mówi nam jaka była naprawdę godzina. Ta sama wartość timestampa dla różnych stref czasowych oznacza inną godzinę.

Załóżmy teraz, że mamy dwa serwery. Jeden udostępnia mechanizm do składania np. rezerwacji kinowych, drugi łączy się z systemem rezerwacji kina i na podstawie parametrów zapisanych w bazie składa rezerwcję. Niby wszystko ok, ale admin na tym drugim, przez przypadek źle ustawił strefę czasową. Kłopoty gotowe! Użytkownikowi data wyświetliła się poprawnie, ale rezerwacja w kinie założona została ze złą godziną.

Dlatego do operacji na datach należy używać typów wbudowanych w bazę i do tego przeznaczonych. Oprócz poprawnego przechowywania danych pozwalają one na wiele operacji takich jak dodawanie dat, odejmowanie dat i ich przekształcanie.