W końcu wziąłem się do roboty, jak to ^kambuz powiedział. Zacząłem od jakichś prostych rzeczy, a mianowicie na którymś tam Poolcampie podrzucono mi info, abym dla wprawy wykonał skrypcik obliczający różnicę pomiędzy dwoma datami. Wczoraj późnym popołudniem usiadłem i napisałem kod przy konsultacji via Skype z Maćkiem.
Nie wiem, czy jest się czym chwalić, jednakże kod działa tak, jak powinien. Wersja ‘live’ do obejrzenia: http://dedzio.geekr.pl/php/porownanie.dat.php
Kod źródłowy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?php function sprawdzpola($d) { return (preg_match('/^([0-9]{1,2})[-\.]([0-9]{1,2})[-\.]([0-9]{4})/', $d) AND strtotime($d) !== false); } function sprawdzdate($d1, $d2) { if ($d1 > $d2) { $result = $d1 - $d2; $roznicadat = ($result/3600)/24; return (int)$roznicadat; } if ($d2 > $d1) { $result = $d2 - $d1; $roznicadat = ($result/3600)/24; return (int)$roznicadat; } } if ($_POST['akcja'] == 'porownaj') { $data1 = strip_tags($_POST['data1']); $data2 = strip_tags($_POST['data2']); if (sprawdzpola($data1) && sprawdzpola($data2)) { $udata1 = strtotime($data1); $udata2 = strtotime($data2); if ($data1 != $data2) { echo '<p>Różnica pomiędzy tymi dwoma datami wynosi <strong>' . sprawdzdate($udata1, $udata2) . '</strong> dni.</p>'; } else { echo '<p class="alert">Podane daty są identyczne. Dlaczego zatem mam cokolwiek liczyć? ;-)</p>'; } } else { echo '<p class="alert">Wprowadź poprawny format daty [dzień-miesiąc-rok] i spróbuj ponownie. ;-)</p>'; } // koniec funkcji sprawdzajacej poprawnosc wpisanych danych } ?> |
Mam nadzieję, że zbytnich herezji w kodzie nie poczyniłem. :-X Programistów PHP proszę o ocenę kodu i podanie jakichś porad, aby usprawnić działanie kodu.
P.S. Warto dodać, że z PHP mam tam jakieś podstawy, jednakże nie są one zbyt dobre póki co.
Napisano 22 gru 2008 o godzinie 9:47 Dodaj komentarz » Kategorie: Tech
Pokasuj puste linie z kodu :P
@Paweł Lipiec: done.
„?>
Różnica pomiędzy tymi dwoma datami wynosi dni.
<?php
”
Nie mogę :/
Przypomina mi to początki mojej zabawy z kodem.
Uprzedzam Cię – print czy echo wystarczy i jest czytelniej.
@Sajam: tak, jak mówiłem – ja z php zaczynam dopiero. ;-) dzięki za uwagę – zobaczymy, czy to poprawi szybkość działania kodu.
@klisiu, pewnie poprawi ;-]
Nie chodzi już o sam czas wykonywania skryptu, bo to ułamki sekund, ale też o czytelność kodu. Sam powiedz, czy nie wygląda dziwnie co chwile zamykane/otwierane kodu php?
@Sajam: no w sumie. :-P
Nie działa :P
Próbowałem różnych dat i nic.
@Łukasz (lemur): hmm? Jakiś screen, etc.?
EDIT: a już widzę – zaraz poprawię. Przy edycji musiałem coś zmajstrować. :-?
Zapewniam Wam, że u mnie działa ;]
Dobra, znalazłem błąd. ;-)
Wcięcia za duże! :)
Wystarczy 2-4 znaki.
@Szarex: przekopiowałem taby z TextMate’a. Przy publikacji następnego kodu zmienię to.
Kolejny koder, a ja dalej ciągle nic nie umiem.
$result = ereg("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})", $d, $regs);
Za ereg* należy Ci się kara chłosty.
„Informacja: preg_match(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg(). „
@Tomasz Topa: wiem, eRIZ mi o tym napisał na jabberze. W wolnej chwili przerobię skrypt.
Napisałbym to w Ruby, ale… nie mam już na to siły :P
No nie…W ciągu 24h kod stał się o wiele czytelniejszy.
Ale też nie rozumiem czemu w ogóle zastosowane wyrażenia regularne.
A tak to oczywiście rozdzielenie warstw do poszczególnych plików polecam na przyszłość. Z tym CSS wklejonym to był hardcore ;)\
Zamiast 2x powtarzać:
zrobiłbym funkcję z argumentem.
Nie znam PHP i właściwie nie chce znać, ale to mi śmierdzi spaghetti code.
Łukasz, oby tak dalej, czekam aż będziesz pracował na stanowisku ‘PHP Developer’ :P
Co Ty byś beze mnie zrobił? ;)
Dodam tylko, że rozmowa na skype trwała bite 6 i pół godziny, więc ten kod musiał powstać.
„Dodam tylko, że rozmowa na skype trwała bite 6 i pół godziny, więc ten kod musiał powstać.”
Maxik wygrywa dzisiejszy internet ;)
@Maciej Płoński: oj daleka droga przede mną…
super!
działa dla dat z dotychczasowego mojego życia. Ale obawiam się, że jak będę chciał za niecałe 30 lat sprawdzić – to nie zadziała. Dlaczego?
Informacja: Poprawny zakres znacznika czasu to zwykle od piątku, 13 grudnia 1901 20:45:54 GMT (czasu Greenwich) do wtorku, 19 stycznia 2038 03:14:07 GMT. (Wartości te odpowiadają minimalnej i maksymalnej wartości 32-bitowej liczbie całkowitej ze znakiem)
może więc następnym krokiem będzie sprawienie, że skrypt policzy dni nawet dla dat np. z 2100 roku?
co ty na to? :)
Fajne zadanie sobie wybrałeś, ja też zaczynam więc wiem jakie ciężkie są początki. A najcięższe z tego wszystkiego to samozaparcie i własna mobilizacja :)
@kambuz: niestety, ale nie mam za bardzo pomysłu na zastosowanie innej funkcji niż strtotime(). Jakaś wskazówka?
A ja kiedyś… (na pierwszym semestrze) popełniłem takie coś…
http://nopaste.com/p/aa3o5GX71
[...] Chyba powinienem teraz wykorzystać te najdłuższe wakacje, jakie mi przysługują i wrócić do nauki PHP. Wtedy to dopiero wyjdzie jaki ze mnie n00b. [...]
[...] momentu kiedy zacząłem pokazywać publicznie swój kod PHP minęło dość sporo czasu. Od grudnia praktycznie moja nauka PHP uległa wstrzymaniu ze [...]


Łukasz Kliś - bloger, geek, uzależniony od muzyki, Mac user, stawiający pierwsze kroki w programowaniu, Gdańszczanin marzący o tym, aby w przyszłości zostać programistą. ;)



