Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP+MYSQL+Odmierzanie czasu - jak i którędy?
Forum PHP.pl > Forum > PHP
messmaker
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 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).
Pawel_W
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?
kajzur
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..
messmaker
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() winksmiley.jpg
messmaker
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.
maly_swd
  1. SELECT time_to_sec(TIMEDIFF(now(), '2009-06-27 22:52:47'))


podaje roznice w sekundach miedzy dwiema datami
messmaker
  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? worriedsmiley.gif Kolumna z czasem w bazie to updatetime
maly_swd
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
messmaker
całkiem się pogubiłem jak to zrobić 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
maly_swd
Ja to dopiero wstalem i nie mialem wczoraj czasu odpisac:)

mozna i tak jak piszesz...
pozdrawiam
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.