Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP+MYSQL+Odmierzanie czasu - jak i którędy?
messmaker
post
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 5
Dołączył: 5.12.2008

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


Mam datę z godziną w bazie MySQL. Chciałbym, aby skrypt:
  • Zliczył ile między podaną datą i godziną minęło odstępów $n-minutowych (najlepiej w pętli, bo tyle razy będzie musiała być wykonana funkcja.
  • Nadpisał w bazie datę po dodaniu zliczonych wcześniej odstępów (nie chodzi o NOW()).

Mile widziane chociaż w części podane na tacy, bo w kwestii mierzenia czasu w PHP jestem zieleńszy niż polna trawa (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif)
Całość ma mniej-więcej zastąpić cron-a (dane byłyby odpowiednio aktualizowane przed wyświetleniem właśnie w wywołanej funkcji).
Go to the top of the page
+Quote Post
Pawel_W
post
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


nie określiłeś się jasno
Cytat
•Zliczył ile między podaną datą i godziną minęło odstępów

pomiędzy jakąś datą a teraz czy pomiędzy 2 datami?
Go to the top of the page
+Quote Post
kajzur
post
Post #3





Grupa: Zarejestrowani
Postów: 385
Pomógł: 26
Dołączył: 22.03.2008
Skąd: TM

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


1. Chodzi Ci o to ile czasu mineło między jedną datą a drugą?
2. Nadpisanie w bazie to UPDATE..

Powiedz coś więcej o tym 1 punkcie..
Go to the top of the page
+Quote Post
messmaker
post
Post #4





Grupa: Zarejestrowani
Postów: 106
Pomógł: 5
Dołączył: 5.12.2008

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


1. Tak, między datą w bazie a obecną(serwera) i mają być to tylko pełne odstępy $n-minutowe

2. Chodziło mi o to, żeby nie używać SET data=NOW() (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Wicepsik
post
Post #5





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

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


mktime" title="Zobacz w manualu PHP" target="_manual, time" title="Zobacz w manualu PHP" target="_manual


@Pawel_W
Nie dawaj mu gotowców.
Go to the top of the page
+Quote Post
messmaker
post
Post #6





Grupa: Zarejestrowani
Postów: 106
Pomógł: 5
Dołączył: 5.12.2008

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


Nie wiem czy dobrze kombinuję, ale ja bym to widział tak:

Najpierw obliczyć różnicę w sekundach tych dwóch dat (nie wiem jak mysqlowy "datetime" zmienić w liczbę sekund).
Następnie podzielić tę różnicę przez moje $n*60 i iloraz potraktować floor()-em.
Pętlą for() zakręcić tyle razy, ile wyniósł mój iloraz po odcięciu części ułamkowej.
Do daty pobranej z bazy dodać iloraz pomnożony przez $n*60.
Przekonwertować tę datę na datetime i zapisać do bazy.
Go to the top of the page
+Quote Post
maly_swd
post
Post #7





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


  1. SELECT time_to_sec(TIMEDIFF(now(), '2009-06-27 22:52:47'))


podaje roznice w sekundach miedzy dwiema datami
Go to the top of the page
+Quote Post
messmaker
post
Post #8





Grupa: Zarejestrowani
Postów: 106
Pomógł: 5
Dołączył: 5.12.2008

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


  1. <?php
  2. $n=10 // 10 minut
  3. $intquery = doquery("SELECT sekundy(TIMEDIFF(now(), updatetime)) FROM {{table}} WHERE id='".$controlrow["id"]."' LIMIT 1", "control");
  4. $czas=mysql_fetch_array($intquery);
  5. $obroty=floor(floor($czas["sekundy"]/60)/$n);
  6. ?>


Tędy? (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif) Kolumna z czasem w bazie to updatetime

Ten post edytował messmaker 27.06.2009, 22:25:15
Go to the top of the page
+Quote Post
maly_swd
post
Post #9





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


1. Napisz dokladnie co chcesz zrobic
2. time_to_sec - to funkcja mysql nie mozej jej sobie zmienic na sekundy
jesli juz to: time_to_sec(TIMEDIFF(now(), '2009-06-27 22:52:47')) as sekundy
3. minuty mozna uzyskac tak SELECT floor(time_to_sec(TIMEDIFF(now(), '2009-06-27 22:52:47'))/60) as minuty
Go to the top of the page
+Quote Post
messmaker
post
Post #10





Grupa: Zarejestrowani
Postów: 106
Pomógł: 5
Dołączył: 5.12.2008

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


całkiem się pogubiłem jak to zrobić (IMG:http://forum.php.pl/style_emoticons/default/ohmy.gif)

Chcę wywołać daną funkcję tyle razy, ile od daty w bazie minęło pełnych okresów o długości $n minut każdy, a następnie zapisać w bazie datę powiększoną o "zaliczone" odstępy.

Przykładowo:
w bazie mamy datę 55 minut wstecz od aktualnej
$n=10;

na wyjściu potrzebuję:
$a=5 (oznaczającą, że od daty w bazie minęło 5 pełnych okresów 10 minut każdy)
i update bazy ustawiający datę na 5 minut wstecz od aktualnej (czyli stara + 50 minut)


---EDIT---


Szkoda, że nikt nie potrafił/nie chciał pomóc.

Poradziłem sobie z uniksową notacją i w bazie przechowuję liczbę sekund od 1/1/1970. Mam nadzieję, że projekt nie wybuchnie 7/2/2106.
Mimo wszystko dziękuję, szczególnie
maly_swd

Ten post edytował messmaker 28.06.2009, 16:34:33
Go to the top of the page
+Quote Post
maly_swd
post
Post #11





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


Ja to dopiero wstalem i nie mialem wczoraj czasu odpisac:)

mozna i tak jak piszesz...
pozdrawiam
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: 22.08.2025 - 19:26