Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> uzupełnianie daty usera o -00-00
Dopler
post 23.04.2012, 16:21:55
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


Witam
Przygotowuję bazę w której inf. historyczne mają daty dzienne, ale userzy często wpisują tylko rok
Daty przechowuje w polu "data" o formacie yyyy-mm-dd

Jakiej użyć funkcji żeby pomimo wprowadzeni przez usera samego roku, była ona zapisana poprawnie (uzupełniona brakującymi zerami) - strtotime ? moje próby zbudowania ormuły kończą się fiaskiem

i jeszcze pytanie, czy przy okazji niedało by się zrobić tak aby inne formaty daty - np. 12.04.0212 też były przeformatowywane. (to drugie nie jest konieczne)


--------------------
Genealogia Polaków
Go to the top of the page
+Quote Post
piotr.pasich
post 23.04.2012, 19:39:13
Post #2





Grupa: Zarejestrowani
Postów: 27
Pomógł: 4
Dołączył: 27.01.2012
Skąd: Gliwice

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


Najlepiej jest skorzystać z DateTime'a

  1. $k = new DateTime('2012-04-03');
  2. $k = new DateTime('12.04.2012');
  3. var_dump( $k->format('Y-m-d') );


jednak po wpisaniu samego roku np. 1987 będzie trzeba to przewidzieć ręcznie, ponieważ klasa zwróci dzisięjszą datę np. przez sprawdzanie długości stringa i odpowiedni validator. Jeżeli strlen == 4 wtedy doklejamy konkretny dzień i miesiąc, jeżeli 10-12 to data jest prawidłowa, w przeciwnym wypadku zwróci komunikat błędu.
Można w drugim przypadku porównać z aktualną datą (drugi obiekt DateTime) - wtedy będzie bezpieczniej.





--------------------
Zapraszam do głosowania na agendę PHPCon Poland 2013 http://www.phpcon.pl/2013/pl/agenda.

---
Piotr Pasich
piotr.pasich@xsolve.pl
www.xsolve.pl
Go to the top of the page
+Quote Post
Dopler
post 23.04.2012, 20:04:37
Post #3





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


@piotr.pasich - dzięki, ale ...
... kurcze - nie mam pojęcia jak to odnieść do mojego problemu


mam imput
<input name="data" type="text" value="">
gdzie użytkownik powinien wprowadzić datę
1780-00-00
ale wprowadza tylko
1780
addWord wprowadza dane do tabeli "tabela"
$addWord=mysql_query("INSERT INTO 'tabela' ('data'....) VALUES ('$data'....)", $db)
i wówczas pole zapełniane jest tylko zerami
0000-00-00

Nie wiem jak dodać to co napisałeś

A nie dało by się np. w INSERCIE wartość "1780" uzupełnić poleceniem RPAD a potem zamienić na datę ? Było by to o tyle korzystne że gdyby ktoś wstawił 1780-04 to też by się poprawnie dodało

=====
spróbowałem
RPAD('$data',10,'-00-00')
i działa jeśli się wpisze 1780 lub 1780-04
to już prawie ideał i na tym poprzestanę
ale fajnie by było żeby funkcja umiała też przetwarzać formaty np.
1.6.1780 lub 21.06.1780 lub 21/6/1780 lub 06-1780 lub 1780.06.31 itp ... ale to już chyba zbyt męcząca sprawa smile.gif

Ten post edytował Dopler 23.04.2012, 22:07:38


--------------------
Genealogia Polaków
Go to the top of the page
+Quote Post
maly_swd
post 25.04.2012, 09:10:22
Post #4





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


  1. $tmp=explode("-", $data);
  2. if(!$tmp[1]) $tmp[1]='01';
  3. if(!$tmp[2]) $tmp[2]='01';
  4.  
  5. $date=implode("-", $tmp);
  6.  


to oczywiscie prymitywne rozwiazanie;)


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
redeemer
post 25.04.2012, 10:22:58
Post #5





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Kolumna `data` jest typu DATE?
  1. sscanf($data, "%d-%d-%d", $y, $m, $d);
  2. $wynik = sprintf("%d-%d-%d", (int)$y, (int)$m, (int)$d);
Najlepiej skorzystaj z jakiegoś Datepickera w JS.

Ten post edytował redeemer 25.04.2012, 10:23:10


--------------------
Go to the top of the page
+Quote Post
Dopler
post 25.04.2012, 11:29:33
Post #6





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


tak - kolumna jest typu "DATE"
Datapicker to trochę jak z armatą na muchę chyba - ale dzięki - trochę trudno zrozumieć dokładnie jak to wszystko działa a typowe opisy funkcji używają takiego języka że człowiek niezaawansowany gubi wątek po pierszych słowach.


--------------------
Genealogia Polaków
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: 25.04.2024 - 07:05