![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 24.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Próbowałem stworzyć skrypt, który byłby w stanie pobrać datę ostatniej wiadomości w aktualnościach oraz datę bieżącą. Z tym problemu nie ma (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Problem pojawia się, gdy chcę te daty odjąć od siebie. Generalnie chodzi o to, żeby w menu na stronie przy zakładce "aktualności" pojawiał się jakiś tam znaczek, sygnalizujący że ostatnio coś nowego pojawiło się w aktualnościach. Przykładowo w ciągu 3 dni od ostatniego wpisu w menu przy aktualnościach widniałby jakiś "!", a po upływie 3 dni zniknąłby automatycznie do czasu wprowadzenia nowej wiadomości. Sam algorytm jest chyba prosty, jednak brak mi wiedzy z zakresu php, żeby przeskoczyć odejmowanie dat. Może jakaś mądra duszyczka będzie znała rozwiązanie. Próbowałem też z strtotime ale wychodziły cuda (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Poniżej moje dotychczasowe (skromne) wypociny. Z góry dzięki za pomoc!!!!
<?php &connection = mysql_connect("xxx", "xxx", "xxx") or die ("Nie można połączyć się z serwerem"); &db = mysql_select_db("xxx", $connection) or die ("Nie można wybrać bazy danych"); &query1 = "SELECT max(data) as data FROM komunikaty"; &result = mysql_query(&query1) or die("Wykonanie zapytania nie powiodło się: ".mysql_error()); while (&row = mysql_fetch_array(&result)) { &komunikat = &row['data']; /* data wprowadzenia komunikatu*/ &teraz = date('d-m-Y'); /* data obecna*/ if(&teraz-&komunikat <=3) /* czy komunikat jest młodszy/równy niż 3 dni */ { /* jeśli komunikat jest młodszy/równy niż 3 dni */ /* czyli wyświetl nazwę zakładki z gifem*/ } else { /* w innym przypadku */ /* wyświetl zakładkę bez "!" */ } } mysql_close($connection); ?> PS: Wybaczcie mały chaos w kodzie Ten post edytował karolusgt 20.11.2008, 23:24:45 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 326 Pomógł: 121 Dołączył: 23.07.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
przekonweruj na unix_timestamp, i dopeiro odejmuj od siebie - roznica to ilosc sekund dzielacych daty. Doba ma 24*60*60 sekund, wiec
|
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 24.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki śliczne. POMOGŁO (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
przekonweruj na unix_timestamp, i dopeiro odejmuj od siebie - roznica to ilosc sekund dzielacych daty. Doba ma 24*60*60 sekund, wiec
Po co 4 działania mnożenia? Serwer się nudzi? 3*24*60*60 = 259200 i to wystarczy wpisać A tak w ogóle to po to są funkcje operujące na datach, żeby z nich korzystać. Np:
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 326 Pomógł: 121 Dołączył: 23.07.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
vokiel
a ) Masz racje, oczywiscie, ze nie ma sensu 3 mnozen, tylko czy bys latwo zrozumial, jakbym napisal 259 200? Ty zapewne tak, ale piszac wyrazenie w postaci mnozenia myslalem pod katem tych, co tego nie rozumieja. b ) Porownujesz stringa (bo to wyjdzie z bazy danych) z data. I dobrze. Pod warunkiem, ze jest w formacie malejacych jednostek czasu, np. najpierw rok, potem miesiac (koniecznie z leading zeros), potem dzień itd. Natomiast autor watku dal do zrozumienia, ze date trzyma w formacie ''d-m-Y" (na podstawie linii &teraz = date('d-m-Y'); /* data obecna*/), wiec ten sposob porownywania nie sprawdzi sie: wg niego "02-01-2000" jest pozniej niz "01-02-2000" c ) Jezeli bawimy sie w optymalizacje, to po co zatrudniac strtotime()? Lepiej mktime() przeciez, ktore nie bedzie musialo analizowac ciagu. Nie bylo moja intencja przedstawienie idealnego rozwiazania a dzialajace i przede wszystkim dydaktyczne Ten post edytował ddiceman 21.11.2008, 15:51:39 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.09.2025 - 11:43 |