Posts Tagged ‘date’

Przydatne funkcje daty w MySQL

Posted in mysql, php, programowanie on maj 13th, 2010 by Wojciech Soczyński – Be the first to comment

Niejednokrotnie 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.