Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odliczanie czasu
Forum PHP.pl > Forum > Przedszkole
viamarimar
Chce odliczyć 60min od teraz

60 min minie za:
  1. <?php
  2. $data_now = date("02-12-2016 21:16:00");
  3. $data_now_plus = date("Y-m-d G:i:s", strtotime("+1 hours",time()));
  4.  
  5. $result=round((strtotime($data_now_plus) - strtotime($data_now))/60,0);
  6. echo $result;
  7. ?>


Problem w tym że efekt tego kodu to:
60 min minie za: 68 ...
a chce by bylo w dół 53 ,.. 32 aż do 0. Nie za bardzo widze problem w tym kodzie? Ktoś wie co nie tak?
nospor
Nie sadzisz, ze godzine wypadaloby dodawac do twojego czasu bazowego - od tej wartosci odejmowac czas aktualny? 2 sekundy pomyslynku tongue.gif
viamarimar
  1. $data = date("2016-02-02 21:16:00" , strtotime("+1 hours",time()));
  2. $data_now = date("Y-m-d G:i:s");
  3.  
  4. $result=round((strtotime($data) - strtotime($data_now))/(60*60*24),0);
  5. echo $result;


O to ci chodzi? Chyba nie..
nospor
Napisalem dokladnie co masz zrobic. Po prostu to zrob. To naprawde jest proste, masz napisane krok po kroku. Wpierw zrealizuj pierszy, potem drugi i tak po malu do mety
viamarimar
  1. //dodaje +1 godzine do bazowego, czyli tego czasu narzuconego?
  2. $data = date("2016-02-02 21:16:00" , strtotime("+1 hours",time()));
  3. //czas aktualny
  4. $data_now = date("Y-m-d G:i:s");
  5.  
  6.  
  7. //od tej wartosci odejmowac czas aktualny ? (od czasu bazowego odejmuje czas aktualny)
  8. $result=round((strtotime($data) - strtotime($data_now))/(60*60*24),0);
  9. echo $result;
  10.  
  11. //wynik chcialbym w minutach.


W ktorym kroku jest blad? W odejmowaniu czasu?
Niree
Co Ty tworzysz biggrin.gif
Cytat
Chce odliczyć 60min od teraz


Jeżeli chcesz odliczyć czas co np. minutę, to musisz albo uruchomić CRON albo użyć JS.
nospor
Czego w tym zdaniu
Cytat
godzine wypadaloby dodawac do twojego czasu bazowego

nie rozumiesz?
Niree
Cytat(nospor @ 2.12.2016, 23:15:20 ) *
Czego w tym zdaniu

nie rozumiesz?



To i tak do niczego nie prowadzi. On chce wynik "minie za:", a nie "minie o godzinie:". A do tego potrzeba JS, który wykonywałby co minutę pomiar aktualnego czasu i odejmował od tego.
viamarimar
Wystarczy mi to bez odświeżania zrobić.

Chce minie za np 22min ale po odsiwezeniu za 21 np.
Wiec nie wydaje mi sie zeby tu byl CRON czy js potrzebne.
Tylko czy musze z bazy korzystac zeby ta informacja co min sie odswiezala i wyswietla?
nospor
@NIree i to mu wlasnie podalem. Przeczytaj caly algorytm a nie tylko pierwszy krok.... Kurcze, piatek i wszyscy wylaczaja myslenie czy jak?
Niree
  1. $odliczonyczas = date('Y-m-d H:i:s', strtotime('1 hour'));

Wynik: 2016-12-2 00:22:00 (biorąc pod uwagę, że aktualnie jest godzina 23:22).
nospor
@Niree ale to do kogo bylo? Bo ani to do mnie ani do autora watku. Na glos myslisz czy jak ? tongue.gif
Niree
Cytat
Tylko czy musze z bazy korzystac zeby ta informacja co min sie odswiezala i wyswietla?

Odświeżanie 'live' zrobisz tylko w JS i to jeszcze z ajaxem.

Musiałbyś zapisywać czas wejścia na stronę do bazy oraz zarejestrować każde kolejne wejście. Potem tylko sprawdzać z bazy, czy minęło te 60 minut od ostatniego wejścia (nawet odświeżenia strony), a jak nie to wyświetlać pozostały czas.

@nospor, może nie załapałem wątku tongue.gif
viamarimar
Już pisałem nie chce live, nie chce odświeżenia.
Mam date A(stała/narzucona) i date B(teraz). Chce obliczyc czas pomiedzy jedna i druga. Wynik wyswietlic w minutach. Po kliknieciu klawisza F5, zeby dalej sprawdzalo czy roznica jeszcze nie jest d1<=d2 a wtedy ma liczyc od nowa. Czy te zapisy powinny byc w bazie robione, czy bez bazy bedzie sie to kasowac? No i jak to wyliczyc?


Majac taki kod:
  1. $data = strtotime("2016-02-02 23:49:00");
  2. $data_now = strtotime(date("Y-m-d H:i:s"));
  3. $result = round(($data - $data_now) / 60,0);


Dostaje zwrot:
-437782 //unix timestamp

jak ztobic z tego ilosc min pomiedzy dwoma datami?
nospor
Podalem ci gotowy algorytm na to a ty usilnie go ignorujesz
viamarimar
Nie ignoruje, aczkowilek nie dociera on do mnie.
nospor
Temu zapytalem sie czego nie rozumiesz w kroku pierwszym. Do tej pory nie uzyskalem na to odpowiedzi
viamarimar
Cytat
Nie sadzisz, ze godzine wypadaloby dodawac do twojego czasu bazowego - od tej wartosci odejmowac czas aktualny?


Rozpisalem jak ja to widze.
1. godzine dodac do twojego czasu - chodzi o do ze mam ten jakis czas XX-XX-XXX XX:XX:XX np ta 21...i sorttime dodac +1? ok..
2. .. - od tej wartosci odjac czas aktualnu -od jakiej wartosci, tej powyzej? no ok, juz to robilem, byc moze nawert dobrze.
3. sorttotime(data) - sortotime(data) wychodzi czas w unix, jak zaminic go na min? bo o ten efekt chodzi
nospor
tylko widzisz, ty do tej pory caly czas dodajesz godzine do aktualnego czasu a nie do czasu bazowego. Nadal nie pokazales kodu, gdzie dodajesz godzine do czasu bazowego...

Jak zamienic sekundy na minuty? Kurcze, idz spac bo twoje szare komorki juz dawno spia :/
viamarimar
  1. $data = strtotime(date("2016-02-02 00:28:00", strtotime('1 hour')));

//dodanie do kodu bazowego? bazowy to dla ciebie ta data wpisywana?
//może masz racje przespie sie z problemem..


ah jesli o tamto chodzilo
  1. $data = strtotime("2016-02-02 23:49:00"); //to bazowe
  2. $data_now = strtotime(date("Y-m-d H:i:s")); //to data teraz
  3. z poprzedniego przykladu, tylko zmieniam sobie dane, zeby rozncia przy odejmowaniu byla mniejsza
Niree
Może podaj tą datę bazową i czas :-)
viamarimar
Siadając dziś do problemu na świeżo, zrobiłem od razu. Jednakże rzeczywiście mam problem z tym co ty Niree wspomniałeś już wczoraj.
Tzn. Mamy 60min czas leci 60 50... 20 10.. itd. nastepuje 0 w bazie robi sie update na dacie ( bo tak to sobie umyslilem, ze data bazowa jest przechowywana w kolumnie w bazie), aczkolwiek by wykonac update trzeba odświeżyć stronę.

Pytanie jak wykonac UPDATE w js( bo wspomniales ze tak sie da) bez uzycia CRONA? Co 60min, ew jak uruchomic skrypt co 60min z pomoca js? Da sie tak?
SmokAnalog
Przede wszystkim powiedz co chcesz zrobić, co robi Twój skrypt. Bez technicznych szczegółów, opowiedz o projekcie.

A to dlatego, że być może pomysł na odświeżanie z poziomu JS jest zły dla Twojego projektu. A może wcale nie.
Pyton_000
A po co w JS. Przy kolejnym odświeżeniu sprawdzasz czy ilość min wyliczona <0, jeśli tak to robisz update w BD zapisując swoją datę bazową + 60 min, i operujesz już na nowej danej.
Niree
Podaj aktualny kod, jaki masz.
viamarimar
Obecnie mam coś takiego:

  1. <div class="container">
  2. <?php
  3.  
  4. $query1= "SELECT * FROM `set`";
  5. $result= mysqli_query($link,$query1) or die(mysqli_error());
  6. $row = mysqli_fetch_array($result);
  7.  
  8. $data_base = date($row['data'],strtotime("1 hours",time())); //czas bazowy
  9. $data_now = date("Y-m-d H:i:s"); // czas aktualny
  10.  
  11. echo '--------';
  12. echo '<br>';
  13. echo $data_base;
  14. echo '<br>';
  15. echo $data_now;
  16. echo '<br>';
  17. echo "ROK:".$row['rok'];
  18. echo '<br>';
  19.  
  20. $data_base_s = strtotime($data_base);
  21. $data_now_s = strtotime($data_now);
  22.  
  23. echo '--------';
  24. echo '<br>';
  25. echo $data_base_s;
  26. echo '<br>';
  27. echo $data_now_s;
  28. echo '<br>';
  29.  
  30. $result = $data_base_s - $data_now_s;
  31. echo '<br>';
  32.  
  33. $expire = floor(abs($result / 60));
  34. $stay = abs($expire - 60 ) ;
  35.  
  36. if($data_base_s <= $data_now_s && $expire<=60){
  37.  
  38.  
  39. echo "Mineło: ". $expire;
  40. echo '<br>';
  41. echo "Do końca tury zostało: ". $stay;
  42.  
  43. }
  44. else{
  45.  
  46. echo "nowa tura";
  47. echo '<br>';
  48.  
  49. $query1= "SELECT rok FROM `set`";
  50. $result= mysqli_query($link,$query1) or die(mysqli_error());
  51. $row = mysqli_fetch_array($result);
  52.  
  53. $v = $row['rok']+1;
  54.  
  55. $query1 = "UPDATE `set` SET data = NOW() ,rok=(".$v.")";
  56.  
  57. $result= mysqli_query($link,$query1) or die(mysqli_error());
  58. echo "update ";
  59. }
  60.  
  61. //38 37 36 ..
  62. //1 2 3
  63. ?>
  64. </div>


Kluczowe było wyznaczenie tej linijki:

  1. echo "Do końca tury zostało: ". $stay;

Czyli wlasnie odliczanie do tylu
//38 37 36 .. Co godzine od nowa

Cała idea:
Gdy zmienia sie tura co 60 min, zmienia sie rok +1 a tura zaczyna od nowa liczyc 60 min w dol.


Na ten moment wymyslilem
  1. <meta http-equiv="refresh" content="3600">

aczkolwiek ten sposob jest slaby chyba.
nospor
$data_base = date($row['data'],strtotime("1 hours",time())); //czas bazowy

Ale zdajesz sobie sprawe, ze ty nadal dodajesz godzine do czasu aktualnego a potem jako format dla date() podstawiasz date bazowa? Ta linijka nie ma zadnego sensu, rownie dobrze mogles napisac:
$data_base = $row['data'];
co da identyczny efekt.
viamarimar
Tak, zobaczyłem to printujac zawartości zmiennych. Chodzi mi teraz bardziej o to jak z tym odświeżaniem tego zadziałać.
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.