Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Do końca aukcji pozostało xDni xGodzin
dawidos_95
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 13.06.2012

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
bialko0019
post
Post #2





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

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


Najszybciej to pobierasz unix`owy czas zakończenia i obecny czas (IMG:style_emoticons/default/wink.gif) Odjmujesz od czasu zakończenia obecny czas, dzielisz to odpowiednio i otrzymujesz w zależności od potrzeby format daty (IMG:style_emoticons/default/wink.gif)

Do obecnej daty możesz dodać dni za pomocą funkcji strtotime(), a zamiana na czas unix wykorzystaj funkcję mktime() ;-)
Go to the top of the page
+Quote Post
dawidos_95
post
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 13.06.2012

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


Cytat(bialko0019 @ 30.05.2013, 15:20:40 ) *
Najszybciej to pobierasz unix`owy czas zakończenia i obecny czas (IMG:style_emoticons/default/wink.gif) Odjmujesz od czasu zakończenia obecny czas, dzielisz to odpowiednio i otrzymujesz w zależności od potrzeby format daty (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
bialko0019
post
Post #4





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

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


  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 (IMG:style_emoticons/default/wink.gif) Wystarczy to podzielić odpowiednio na dni godziny lata miesiące itd ;p
Go to the top of the page
+Quote Post
dawidos_95
post
Post #5





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 13.06.2012

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


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 (IMG:style_emoticons/default/wink.gif) Wystarczy to podzielić odpowiednio na dni godziny lata miesiące itd ;p


Okey, a gdzie pobieranie z bazy danych?
Go to the top of the page
+Quote Post
_Borys_
post
Post #6





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


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
Go to the top of the page
+Quote Post
bialko0019
post
Post #7





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

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


Kolega też dobrze podsunął drugi pomysł, ja sądząc po tagu "PHP" myślałem nad rozwiązaniem tylko w php`ie (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
dawidos_95
post
Post #8





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 13.06.2012

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


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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
nikestylex7
post
Post #9





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


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
Go to the top of the page
+Quote Post
dawidos_95
post
Post #10





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 13.06.2012

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


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?
Go to the top of the page
+Quote Post
miras
post
Post #11





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


oczywiście, że się da, robisz warunek, jeśli strtotime($czas)<0 to aktualizujesz w bazie jakąś komórkę np. aktywne=0
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 14:12