Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z formatowaniem daty
lucca
post 30.05.2008, 10:51:46
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 7.03.2008

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


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
Go to the top of the page
+Quote Post
Pilsener
post 30.05.2008, 11:37:23
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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.
Go to the top of the page
+Quote Post
lucca
post 30.05.2008, 12:10:17
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 7.03.2008

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


Taki skrypcik do wstawiania tras koncertowych. To akurat nie jest istotne. Ale takie daty się zdarzają, i problem w tym, jak to obrobić.
Go to the top of the page
+Quote Post
sniezny_wilk
post 30.05.2008, 12:54:55
Post #4





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

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


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.

Ten post edytował sniezny_wilk 30.05.2008, 12:56:18


--------------------
Go to the top of the page
+Quote Post
lucca
post 30.05.2008, 12:56:50
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 7.03.2008

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


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.
Go to the top of the page
+Quote Post
mike
post 30.05.2008, 13:01:17
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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
Go to the top of the page
+Quote Post
sniezny_wilk
post 30.05.2008, 13:06:12
Post #7





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

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


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


--------------------
Go to the top of the page
+Quote Post
lucca
post 30.05.2008, 13:09:40
Post #8





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 7.03.2008

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


@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.
Go to the top of the page
+Quote Post
sniezny_wilk
post 30.05.2008, 13:13:02
Post #9





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

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


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

Ten post edytował sniezny_wilk 30.05.2008, 13:14:29


--------------------
Go to the top of the page
+Quote Post
lucca
post 30.05.2008, 13:15:04
Post #10





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 7.03.2008

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


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?
Go to the top of the page
+Quote Post
sniezny_wilk
post 30.05.2008, 13:20:27
Post #11





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

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


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 ?


--------------------
Go to the top of the page
+Quote Post
mike
post 30.05.2008, 13:24:00
Post #12





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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. ?>
Go to the top of the page
+Quote Post
lucca
post 30.05.2008, 14:11:49
Post #13





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 7.03.2008

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


Dzięki Panowie za rady. Już wiem jak to naprawić smile.gif
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: 12.06.2025 - 20:43