Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Porównanie dat (dzień i miesiąc)
krzesik
post 21.12.2012, 18:29:22
Post #1





Grupa: Zarejestrowani
Postów: 513
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


Witam trafiłem na zagwostkę i nie wiem jak to ruszyć, w sumie mam funkcję która działa ale niestety nie w miesiącu grudniu.........

mam w tabeli dwie kolumny z datami (data_od, data_do), z różnych powodów zapisuję ją w formacie mm-dd bez roku, następnie wyświetlam poszczególne rekordy gdy dzisiejsza data zawiera się pomiędzy data_od oraz data_do. Wstawiłem do zapytania dodatkowo warunek sprawdzający czy data_do nie jest czasem większa od data_od bo to oznacza przełom roku. Wszystko ładnie działa, ale niestety wali się jeśli skrypt jest uruchomiony w miesiący grudniu a data_do jest również grudniowa...... pomocy.....

  1. $month = date("m");
  2. $day = date("d");
  3. $dzisiaj = "$month-$day";
  4.  
  5.  
  6. //zapytanie
  7. $sql = "SELECT * FROM tabelka WHERE (($dzisiaj BETWEEN data_od AND data_do) OR (data_od>data_do AND ($dzisiaj NOT BETWEEN data_do AND data_od)))";
  8.  
Go to the top of the page
+Quote Post
mmmmmmm
post 21.12.2012, 23:45:22
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


BETWEEN uwzględnia również wartości graniczne (przedzial obustronnie domknięty). W tym drugim przypadku musisz zastosoać przedziały otwarte.
Go to the top of the page
+Quote Post
krzesik
post 22.12.2012, 13:36:25
Post #3





Grupa: Zarejestrowani
Postów: 513
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


ale nie w tym mam problem, problem polega na ty, że funkcja porównuje wpisane daty i jeśli data_od = 01-11 (pierwszy listopada), data_do = 31-12, a dzisiejsza data to 22-12 to rekord jest pomijany, myślę że zrobiłem błędne założenia podczas projektu, ale nie wiem jak to mam teraz zmienić. Proste by było gdybym miał pełne daty dd-mm-rrrr, ale niestety nie mogę tu brać pod uwagę roku......
Go to the top of the page
+Quote Post
mmmmmmm
post 22.12.2012, 18:42:12
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


To jak w końcu zapisujesz datę? dd-mm, czy mm-dd? W kodzie uwzględniasz mm-dd...
Go to the top of the page
+Quote Post
krzesik
post 23.12.2012, 10:51:15
Post #5





Grupa: Zarejestrowani
Postów: 513
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


mm-dd, ale jakie to ma teraz znaczenie? Sprawdzałem w taki i taki sposób....
Go to the top of the page
+Quote Post
mmmmmmm
post 24.12.2012, 09:37:47
Post #6





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Znaczenie ma takie, że zapisując (w bazie) datę w postaci dd-mm, to możesz wszystko wywalić i zacząć od nowa.
Bo 13-01 (1301)-13 styczeń, jest większa od 08-08 (0808) - 8 sierpnia. W rzeczywistości tak nie jest. Przy analogicznym zapisie mm-dd jest 0113 i 0808, więc jest wszystko w porządku. I twoje zapytania powinny działać prawidłowo. (tak mi się wydaje)
Ale musisz mieć tak zapisane w bazie i tak samo porównywać.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 09:34