Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z formatowaniem daty
Forum PHP.pl > Forum > Przedszkole
lucca
Witam!

Mam skrypt w którym można dodawać daty. Ale niektóre daty są niekompletne, to znaczy nieznany jest np. miesiąc (2005-03-00)

Do bazy zapisuje to wszystko ładnie, istnieje prawidłowy wpis. Problem pojawia się przy wyciąganiu daty z bazy:


  1. <?php
  2. '.date(''.$r['date_format'].'',strtotime($r[date])).'
  3. ?>


$r['date_format'] jest to format daty, indywidualnie ustawiany. Problem w tym, że kiedy trafi się na taką datę jak w przykładzie, to zwrócone zostaje:
  1. <?php
  2. 1975.08.31
  3. ?>

mimo, że powinno być zwrócone
  1. <?php
  2. 1975.09.00
  3. ?>


Ma ktoś jakiś pomysł jak to obejść?

Pozdrawiam
Pilsener
Cytat
nieznany jest np. miesiąc
- to co to za data? Sprawdzaj, czy data jest poprawna (jest specjalna funkcja do tego), jeśli nie jest to w ogóle jej nie obrabiaj. I nie powinieneś dopuszczać do sytuacji, kiedy w bazie data jest niepoprawna - najlepiej zrób zapytanie, które wszystkie niepoprawne daty z bazy wywali i sprawdzaj, czy data jest poprawna, zanim trafi do bazy.
lucca
Taki skrypcik do wstawiania tras koncertowych. To akurat nie jest istotne. Ale takie daty się zdarzają, i problem w tym, jak to obrobić.
sniezny_wilk
Cytat(lucca @ 30.05.2008, 11:10:17 ) *
Taki skrypcik do wstawiania tras koncertowych. To akurat nie jest istotne. Ale takie daty się zdarzają, i problem w tym, jak to obrobić.


Chcesz powiedzieć że takie daty się zdarzają jak ta: 1975.09.00 ? Powiedz mi gdzie się zdarzają, bo w życiu takiej daty nie widziałem. PHP nie zna takich dat.
lucca
Cytat(sniezny_wilk @ 30.05.2008, 13:54:55 ) *
Chcesz powiedzieć że takie daty się zdarzają jak ta: 1975.09.00 ? Powiedz mi gdzie się zdarzają, bo w życiu takiej daty nie widziałem.


Robisz spam Kolego łapiąc w dodatku za słówka. Zdarza się, że ktoś nie zna pełnej daty. Proste. Zna tylko miesiąc, rok, a na przykład nie zna dnia.
mike
Cytat(sniezny_wilk @ 30.05.2008, 13:54:55 ) *
Chcesz powiedzieć że takie daty się zdarzają jak ta: 1975.09.00 ? Powiedz mi gdzie się zdarzają, bo w życiu takiej daty nie widziałem. PHP nie zna takich dat.
~sniezny_wilk no faktycznie nic nie wnosisz. Pomyśl trochę zanim napiszesz.
Wpadłeś na to, że może i PHP nie zna takiej daty ale to jednak ludzie ją wpisują. Słyszałeś chyba o sprawdzaniu poprawności danych pochodzących od użytkownika, co? Jeśli tak co czego sie czepiasz? tongue.gif
sniezny_wilk
@mike, @author, nie robię spamu, tylko chciałem zwrócić uwagę, że to nie jest poprawa data. To tak jakbym powiedział do kogoś "wpadnij do mnie 2008.06.00". Mike ma rację z tą filtracją danych, można to zastosować, ale lucca przedstawił to tak, jakby specjalnie pozwalał użytkownikowi wpisać 00.
lucca
@sniezny_wilk, ja doskonale wiem, że taka data nie jest poprawna. Naprawdę smile.gif

Tylko mam właśnie problem z tym, co zrobić kiedy data jest niepełna, a takie, zdarzają się baardzo często.
sniezny_wilk
Cytat(lucca @ 30.05.2008, 12:09:40 ) *
@sniezny_wilk, ja doskonale wiem, że taka data nie jest poprawna. Naprawdę smile.gif

Tylko mam właśnie problem z tym, co zrobić kiedy data jest niepełna, a takie, zdarzają się baardzo często.


Mike już napisał. Filtrować dane i sprawdzać, czy użytkownik wpisał niepoprawną datę, jeśli jest zła wyrzucić komunikat z prośbą o poprawienie. Pierwszy lepszy sposób: checkdate" title="Zobacz w manualu PHP" target="_manual
lucca
Cytat(sniezny_wilk @ 30.05.2008, 14:13:02 ) *
Mike już napisał. Filtrować dane i sprawdzać, czy użytkownik wpisał niepoprawną datę, jeśli jest zła wyrzucić komunikat z prośbą o poprawienie. Pierwszy lepszy sposób: [manual\]checkdate\[/manual\]


No to wiem, ale co zrobić w momencie kiedy tej daty po prostu dokładnej nie zna?
sniezny_wilk
1. Poprosić aby user wpisał orientacyjną datę i jeśli jest możliwość to zrobić opcję zmiany daty w późniejszym czasie na dokładniejszą.
2. Zrobić możliwość dodania ram czasowych, czyli coś tam się wydarzy pomiędzy jakimiś datami.
3. Zrobić osobne selecty z wyborem daty rozbitej, czyli osobno dni, osobno miesiąc i osobno rok, zostawić możliwość pustego wpisu, lub opcji "nie wiem" i zmienić konstrukcję w tabeli

Potrzebujesz tą datę do czegoś innego niż wyświetlanie ? Sortujesz po niej ?
mike
Cytat(lucca @ 30.05.2008, 14:15:04 ) *
No to wiem, ale co zrobić w momencie kiedy tej daty po prostu dokładnej nie zna?
Zapisuj w formacie timestamp zaokrąglając do danych, które znasz.
  1. <?php
  2. echo mktime(12, 30, 15, 5, 30, 2008); // 2008-05-30 12:30:15
  3. echo mktime(12, 30, 0, 5, 30, 2008); // bez sekund
  4. echo mktime(12, 0, 0, 5, 30, 2008); // bez sekund i minut
  5. echo mktime(0, 0, 0, 5, 30, 2008); // bez sekund, minut i godziny
  6. echo mktime(0, 0, 0, 5, 0, 2008); // bez sekund, minut, godziny i dnia
  7. echo mktime(0, 0, 0, 0, 0, 2008); // bez sekund, minut, godziny, dnia i miesiąca. czyli sam rok 2008
  8. ?>
lucca
Dzięki Panowie za rady. Już wiem jak to naprawić smile.gif
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.