Przydatne funkcje daty w MySQL
Posted in mysql, php, programowanie on maj 13th, 2010 by Wojciech Soczyński – Be the first to commentNiejednokrotnie podczas pisania różnych skryptów, mam do czynienia z arytmetyką dat. Tak było również i tym razem, kiedy miałem zaimplementować funkcjonalność polegającą na ograniczeniu oddawania ponownego głosu w sądzie do 24 godzin.
Istnieje kilka rozwiązań tego problemu, pierwszym rozwiązaniem jest odejmowanie timestamp-ów. Nie jest to rozwiązanie zbyt wygodne, ponieważ trzeba ręcznie obliczać ilość sekund etc. Poza tym dochodzą problemy z strefami czasowymi. Może się zdarzyć sytuacja, że PHP ma ustawioną inną strefę czasową niż baza danych i wtedy wychodzą nam jakieś dziwne wyniki.
Jest łatwe rozwiązanie tego problemu, na które ostatnio natknąłem się właśnie przy okazji ww. zadania. Są to MySQL-owe funkcje date_add i date_sub. Przejdźmy więc do przykładów.
Obliczenie daty 5 godzin wcześniej od teraz:
select date_sub(now(),interval 5 hour)
Obliczenie daty miesiąc wcześniej od teraz:
select date_sub(now(),interval 1 month)
Generalnie reguła jest taka, że w drugim argumencie piszemy „interval <liczba> <jednostka>” gdzie liczba jest liczbą całkowitą, natomiast jednostka jest angielską nazwą jednostki daty(dzień, miesiąc, rok, sekunda…) w liczbie pojedynczej.