Archiwa tagu: daty odejmowanie dat

Odejmowanie dwóch dat (obecna – data zdarzenia) i prezentacja wyników w dniach

PROBLEM:

Odejmowanie dwóch dat (obecna – data zdarzenia) i prezentacja wyników w dniach

SZCZEGÓŁY:

Chciałbym odjąć dwie daty, obecną – data zdarzenia (np. data zapisania rekordu do bazy), w celu prezentacji wyników odejmowania w dniach. Jeśli zdarzenie (np. data zapisania rekordu do bazy) mała miejsce dzisiaj to w wyniku zapytania chcę otrzymać tekst „dzisiaj” i analogicznie jeśli zdarzenie miało miejsce wczoraj to chcę otrzymać tekst ‚wczoraj’ i tak samo z ‚przedwczoraj’. Jeśli zdarzenie miało miejsce później niż przedwczoraj to wynikiem odejmowania ma być prezentacja daty zdarzenia w formacie „Y-m-d”, czyli Rok-miesiąc-dzień.

ROZWIĄZANIE:

Możemy ten problem rozwiązać na poziomie aplikacji czy strony WWW, pobrać datę z bazy i porównać ją daty obecnej. Pewniejszym rozwiązaniem będzie uzyskanie potrzebnego wyniku od razy z zapytania SQL. W tym celu możemy skorzystać z funkcji DATEDIFF, która zwróci nam różnicę między parametrami (w tym przypadku datami). Aby uzyskać zadowalający nas efekt musimy jeszcze skorzystać z funkcji CASE która w zależności od wyniku odejmowania dat zwróci nam wartość o którą nam chodzi (‚dzisiaj’, ‚wczoraj’, ‚przedwczoraj’ lub datę zapisu rekordu do bazy inną nić wymienione).

SELECT
id
,tytul
,opis
,cena
,case(datediff(now(),data_dodania))               <- tutaj następuje odjęcie dat

WHEN 0 THEN ‚dzisiaj’      <- jeśli zdarzenie miało miejsce dzisiaj to różnicą w odejmowaniu jest 0, wtedy chcemy wyświetlić tekst  ‚dzisiaj’

WHEN 1 THEN ‚wczoraj’  <- jeśli zdarzenie miało miejsce wczoraj to różnicą w odejmowaniu jest 1, wtedy chcemy wyświetlić tekst  ‚wczoraj’

WHEN 2 THEN ‚przedwczoraj’   <- analogicznie jak wyżej

ELSE date(data_dodania) END as data_dodania   <- wszystkie inne przypadki to sytuacje kiedy zdarzenie miało miejsce wcześniej niż przedwczoraj i wtedy chcemy wyświetlić konkretną datę w formacie „Y-m-d”
,data_dodania as data_dodania_org   <- jeśli oryginalna data jest w formacie DATETIME to możemy ją wykorzystać do sortowania
FROM
tab1
WHERE
[..TUTAJ PODAJEMY WARUNKI WYSZUKIWANIA REKORDÓW…]
ORDER BY
data_dodania_org DESC   <- jak już wcześniej pisałem możemy wykorzystać oryginalną datę do sortowania

GOTOWE 🙂 MIŁEJ ZABAWY