Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] porównywanie i odmierzanie dat
Forum PHP.pl > Forum > Przedszkole
lok
1. W wielu zapytaniach SQL uzywam opcji NOW() do wpisania obcnej daty. Jak najłatwiej wpisywać do rekordu datę o 7 dni później niż obecna (jest to mozliwe w ramach samego SQLa)?

2. Szukalem troche na temat porównywania dat, ale nie wiem jak najlepiej to zrobić gdy pobieram do php date w takim formacie jakim umieszcza ją SQL przez funkcje NOW().

Pozdrawiam
thek
ad 1 ) Zobacz do manuala MySQL bo sposobów na dodanie czegoś do daty jest przynajmniej kilka. Istnieje bowiem kilka funkcji w MySQL które pozwalają na to.

ad 2) Data w MySQL to int. Wystarczy więc sprawdzać ją zwykłymi operatorami. Różnica pomiędzy nimi już rzędu sekundy wykaże, która jest późniejsza smile.gif No chyba, że zależy Ci tylko na porównaniu samych dni i miesięcy. Wtedy te dane musisz wyciągnąć z MySQL-owego formatu. Na to też w dziale o funkcjach daty i czasu znajdziesz.

Jak więc widzisz wszystko sprowadza się do zerknięcia na stronę z manualem MySQL i nic więcej.
Nattfarinn
Cytat(thek @ 3.11.2009, 18:34:37 ) *
Data w MySQL to int.

Co Ty opowiadasz...? NOW() zwraca datę w określonym formacie, a nie jako Integer. Nie myl unixowego timestampa z innymi formatami...
vokiel
Manual się kłania 11.6. Date and Time Functions
Przeczytaj o wszystkich funkcjach, w przykładach znajdziesz kilka możliwych rozwiązań, do wyboru do koloru.
Hint: ważne słowo w tym przypadku: INTERVAL

Z tym przeczytaniem piszę na poważnie, przyda Ci się na pewno, nawet jak nie będziesz dokładnie pamiętał składni, to chociaż będziesz miał pojęcie czy i jak da się coś takiego zrobić. Później doczytanie szczegółów zajmie Ci tylko chwilkę.

Pozdrawiam
lok
Dzieki za odpowiedzi. W javie czy AS jest klasa data (świetnie współdziałająca z data/datatime SQLowymi) stąd myślałem że w php też są narzędzia do łatwego opertowania na tego typu danych.

Mam jeszcze jedno pytanko. Czy z poziomu samego SQLa można sprawdzić czy data w rekordzie jest wieksza niz obecna i zwrocic wynik tego porównania?
vokiel
IFF() + CURDATE()
thek
Cytat(Nattfarinn @ 3.11.2009, 18:46:31 ) *
Co Ty opowiadasz...? NOW() zwraca datę w określonym formacie, a nie jako Integer. Nie myl unixowego timestampa z innymi formatami...
W takim wypadku czemu CURRENT_TIMESTAMP oraz kilka innych funkcji w manualu są opisane jako synonimy dla NOW() skoro rzekomo zwracają co innego? Sformatować datę do postaci zrozumiałej dla człowieka to nie problem. Wewnętrznie jednak to może być coś innego niż jest pokazywane smile.gif A manual wyraźnie to sugeruje.

A do autora... W PHP też są narzędzia do operowania na datach. Ponownie zalecam manual. Tym razem PHP -> Funkcje daty i czasu w PHP
Odpisywaliśmy w odpowiedzi o MySQL bo też to Cię najbardziej interesowało. Ale i PHP potrafi co nieco z nimi wyczyniać.

EDIT: W wyniku wymiany PW z Nattfarinn-em doszedłem do wniosku, że wyraziłem się nieprecyzyjnie. Zamiast "Data w MySQL to int." powinienem użyć "Data w MySQL to tak naprawdę int." Użyłem bowiem skrótu myślowego. Od strony użytkownika timestamp jest bowiem widoczny jako sformatowany string, choć wszelkie operacje (poprzez odpowiednie funkcje) są na nim wykonywane już wewnętrznie jako integer. I to właśnie miałem na myśli pisząc, iż jest to int. Jeśli kogoś wprowadziłem tym w błąd to szczerze przepraszam.
Tak czy inaczej sięgnięcie przez autora tematu (lok) do manuali php i mysql da odpowiedź na dręczące go pytania. Sprawę zaś czy timestamp to string czy integer uważam za ostatecznie wyjaśnioną.
Nattfarinn
Cytat(thek @ 4.11.2009, 09:22:10 ) *
W takim wypadku czemu CURRENT_TIMESTAMP oraz kilka innych funkcji w manualu są opisane jako synonimy dla NOW() skoro rzekomo zwracają co innego? Sformatować datę do postaci zrozumiałej dla człowieka to nie problem. Wewnętrznie jednak to może być coś innego niż jest pokazywane smile.gif A manual wyraźnie to sugeruje.

A czytałeś manual? CURRENT_TIMESTAMP() zwraca datę w formacie Timestamp i powtarzam ponownie - nie jest to format Integer. Idąc Twoim tokiem rozumowania, można powiedzieć, że wszystko jest zapisane za pomocą zer i jedynek, a w postaci zrozumiałej przez człowieka przedstawione tylko dla jego wygody. Mylisz pojęcia i funkcje, bo typ Integer zwracaja funkcja UNIX_TIMESTAMP(), która de facto konwertuje format Timestamp na Integer. Tego manual nie sugeruje - w nim to jest czarno na białym napisane.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.