Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Do końca aukcji pozostało xDni xGodzin
Forum PHP.pl > Forum > Przedszkole
dawidos_95
Witam. Mam w bazię datę dodania aukcji oraz czas (1 lub 2 lub 3 lub 4h) ile ta aukcja ma trwać. Teraz chcę wyświetlić ile pozostało do końca aukcji. Próbowałem próbować kilka działań i wyświetlić to w date() ale nie uzyskałem chcianego efektu. I chyba date() nie da się zrobić ile zostało do końca aukcji.
bialko0019
Najszybciej to pobierasz unix`owy czas zakończenia i obecny czas wink.gif Odjmujesz od czasu zakończenia obecny czas, dzielisz to odpowiednio i otrzymujesz w zależności od potrzeby format daty wink.gif

Do obecnej daty możesz dodać dni za pomocą funkcji strtotime(), a zamiana na czas unix wykorzystaj funkcję mktime() ;-)
dawidos_95
Cytat(bialko0019 @ 30.05.2013, 15:20:40 ) *
Najszybciej to pobierasz unix`owy czas zakończenia i obecny czas wink.gif Odjmujesz od czasu zakończenia obecny czas, dzielisz to odpowiednio i otrzymujesz w zależności od potrzeby format daty wink.gif

Do obecnej daty możesz dodać dni za pomocą funkcji strtotime(), a zamiana na czas unix wykorzystaj funkcję mktime() ;-)


Ale jak mam pobrać ten unixowy? Zrobiłem tak:

  1. $a = $vieww['added']; //data dodania
  2. $b = $view['endon']; //czas trwania aukcji, zapisuje tak: 86400 - 1 dzien
  3. $c = time();
  4. $d = $a + $b - $c;
  5.  
  6. date("d H:i:s", $d)


Efekt: 31 23:34:28 - jest blisko, ale to jeszcze nie to
bialko0019
  1. <?php
  2.  
  3. $now = mktime();
  4. $enddate = mktime(date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'). '+ 1 day')));
  5.  
  6. $remaining = $enddate - $now;
  7.  
  8. echo $remaining;
  9.  
  10.  
  11. ?>


i teraz w zmiennej remaining masz ilość sekund wink.gif Wystarczy to podzielić odpowiednio na dni godziny lata miesiące itd ;p
dawidos_95
Cytat(bialko0019 @ 30.05.2013, 16:00:39 ) *
  1. <?php
  2.  
  3. $now = mktime();
  4. $enddate = mktime(date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'). '+ 1 day')));
  5.  
  6. $remaining = $enddate - $now;
  7.  
  8. echo $remaining;
  9.  
  10.  
  11. ?>


i teraz w zmiennej remaining masz ilość sekund wink.gif Wystarczy to podzielić odpowiednio na dni godziny lata miesiące itd ;p


Okey, a gdzie pobieranie z bazy danych?
_Borys_
Porównanie można zrobić w bazie porównując do NOW()
Poczytaj o funkcjach DATEDIFF(),TIMEDIFF(),TIME_TO_SEC() i innych podobnych
Difference between two dates in MySQL
Funkcje bazy danych MySQL 5.5 - Data i Czas
bialko0019
Kolega też dobrze podsunął drugi pomysł, ja sądząc po tagu "PHP" myślałem nad rozwiązaniem tylko w php`ie wink.gif
Pobieranie z bazy danych? Jeśli $view['added'] to data dodania, a $view['endon'] no to dajesz tak:

  1. $now = mktime();
  2. $enddate = mktime($view['endon']);
  3.  
  4. $remaining = $enddate - $now;
  5.  
  6. echo $remaining;
  7.  


tylko $remaining musisz podzielić żeby otrzymać dni, godizny, minuty , sekundy itd ;p
dawidos_95
Cytat(bialko0019 @ 30.05.2013, 17:33:52 ) *
Kolega też dobrze podsunął drugi pomysł, ja sądząc po tagu "PHP" myślałem nad rozwiązaniem tylko w php`ie wink.gif
Pobieranie z bazy danych? Jeśli $view['added'] to data dodania, a $view['endon'] no to dajesz tak:

  1. $now = mktime();
  2. $enddate = mktime($view['endon']);
  3.  
  4. $remaining = $enddate - $now;
  5.  
  6. echo $remaining;
  7.  


tylko $remaining musisz podzielić żeby otrzymać dni, godizny, minuty , sekundy itd ;p


Kurde. Teraz to czas stoi cały czas w miejscu ;/


To jest pojebane wszystko. W każdym rekordzie inaczej wychodzi. Zacznijmy od nowa. kolumna endon to czas trwania aukcji, wybierany z pola select.

86400 - 1 dzień
172800 - 2 dni
259200 - 3 dni
345600 - 4 dni

Pole added zawiera datę dodania rekordu do bazy danych. Korzystam z tego:

  1. $now = mktime();
  2. $enddate = mktime($vieww['endon']);
  3. $remaining = $enddate - $now;


i wyświetlam tym
  1. '.date("d", $remaining).' dni, '.date("H", $remaining).' godzin, '.date("i", $remaining).' minut, '.date("s", $remaining).' sec


i wszędzie jest inaczej
nikestylex7
przeanalizuj sobie to

  1. //funkcja obliczania czasu
  2. function czas($time){
  3. if($time <= 59){
  4. if($time <= 1){
  5. echo $time . " sekunde";
  6. }
  7. else if($time >= 2 && $time <= 4){
  8. echo $time . " sekundy";
  9. }
  10. else{
  11. echo $time . " sekund";
  12. }
  13. }
  14. else if($time >= 60 && $time <= 3599){
  15. $time = round($time / 60, 0);
  16. if($time <= 1){
  17. echo $time . " minute";
  18. }
  19. else if($time >= 2 && $time <= 4){
  20. echo $time . " minuty";
  21. }
  22. else {
  23. echo $time . " minut";
  24. }
  25. }
  26. else if($time >= 3600){
  27. $time = round($time / 3600,0);
  28. if($time <= 1){
  29. echo $time . " godzine";
  30. }
  31. else if($time >= 2 && $time <= 4){
  32. echo $time . " godziny";
  33. }
  34. else {
  35. echo $time . " godzin";
  36. }
  37. }
  38. }
  39. //koniec funkcji obliczania czasu
dawidos_95
Cytat(nikestylex7 @ 30.05.2013, 18:20:21 ) *
przeanalizuj sobie to

  1. //funkcja obliczania czasu
  2. function czas($time){
  3. if($time <= 59){
  4. if($time <= 1){
  5. echo $time . " sekunde";
  6. }
  7. else if($time >= 2 && $time <= 4){
  8. echo $time . " sekundy";
  9. }
  10. else{
  11. echo $time . " sekund";
  12. }
  13. }
  14. else if($time >= 60 && $time <= 3599){
  15. $time = round($time / 60, 0);
  16. if($time <= 1){
  17. echo $time . " minute";
  18. }
  19. else if($time >= 2 && $time <= 4){
  20. echo $time . " minuty";
  21. }
  22. else {
  23. echo $time . " minut";
  24. }
  25. }
  26. else if($time >= 3600){
  27. $time = round($time / 3600,0);
  28. if($time <= 1){
  29. echo $time . " godzine";
  30. }
  31. else if($time >= 2 && $time <= 4){
  32. echo $time . " godziny";
  33. }
  34. else {
  35. echo $time . " godzin";
  36. }
  37. }
  38. }
  39. //koniec funkcji obliczania czasu


przeanalizowałem, ale nic sie nie wyświetla.

W końcu mi się udało.
  1. //funkcja obliczania czasu
  2. $cos = $vieww['added'] + $vieww['endon'];
  3.  
  4. $minute = date("i", $cos); //minuta do której ma odliczac
  5. $hour = date("H", $cos); // godzina do której odlicza
  6. $day = date("d", $cos); // Dzień do którego ma odliczać
  7. $month = date("m", $cos); // Miesiąc do którego ma odliczać
  8. $year = date("Y", $cos); // Rok do którego ma odliczać
  9. // po co $target, uzywasz go tylko raz... niepotrzebna alokacja pamieci
  10. $diff = mktime($hour, $minute, 0, $month, $day, $year) - time();
  11.  
  12.  
  13. $days = ($diff - ($diff % 86400)) / 86400;
  14. $diff = $diff - ($days * 86400);
  15. $hours = ($diff - ($diff % 3600)) / 3600;
  16. $diff = $diff - ($hours * 3600);
  17. $minutes = ($diff - ($diff % 60)) / 60;
  18.  
  19. $view.='
  20. <center>
  21. Pozostało jeszcze ...<br><br><b><em>
  22. '.$days.' Dni <br> '.$hours.' Godzin <br> '.$minutes.' Minut<br><br></b></em>... DO KOLEJNEJ MASY KRYTYCZNEJ !!! <br>
  23. </center>';


Teraz pytanie czy za pomocą tego kodu uda się zamknąć aukcję jeśli czas się skonczy?
miras
oczywiście, że się da, robisz warunek, jeśli strtotime($czas)<0 to aktualizujesz w bazie jakąś komórkę np. aktywne=0
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.