Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrypt który pokazuje wszystkie daty przez 24h
MlodyJNTR
post 10.04.2013, 08:12:18
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 18.10.2011

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


Witam jestem dobry w PHP ale nie mogę jednej rzeczy ogarnąć z datą ;/ bo potrzebuje skryptu który pokazuje wszystkie daty które były przez 24h np od godziny 09:10 leciały tak 09:09, 09:08, 09:07, 09:06, 09:05, 09:04, 09:03, 09:02, 09:01, 09:00, 08:59, 08:58 .... i tak przez 24 h.
Go to the top of the page
+Quote Post
mlawnik
post 10.04.2013, 10:00:01
Post #2





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

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


-1 minuta i w pętlę? tongue.gif


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
MlodyJNTR
post 10.04.2013, 10:12:14
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 18.10.2011

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


tak się chyba nie da bo bo jak będzie 08:00 to już nie da rady dalej np 07:59 tylko będzie 08:-01
Go to the top of the page
+Quote Post
rocktech.pl
post 10.04.2013, 10:16:44
Post #4





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Witam.

Kiedyś napisałem taką funkcję:

  1. /**
  2.   * Zwraca przedzialy czasowe
  3.   * @param integer $SecondsInterval liczba sekund
  4.   *
  5.   * @return array
  6.   */
  7. function getPeriodSeries($SecondsInterval = 3600)
  8. {
  9.  
  10. $begin = new DateTime('00:00:00');
  11. $end = new DateTime('23:59:59');
  12. $ranges = array();
  13. /**
  14.   * @internal Lepiej nie kombiuj z ta funkcja tongue.gif!
  15.   * @see <http://en.wikipedia.org/wiki/ISO_8601#Time_intervals>
  16.   */
  17. $interval = new DateInterval('PT0H00M' . $SecondsInterval . 'S');
  18. $daterange = new DatePeriod($begin, $interval, $end);
  19.  
  20. foreach ( $daterange as $k => $date ) {
  21. $ranges[$k]['from'] = $date->format("H:i:s");
  22. $ranges[$k]['to'] = $date->modify('+' . $SecondsInterval - 1 . ' seconds')->format("H:i:s");
  23. }
  24. return $ranges;
  25. }


Malutkie przeróbki i dostaniesz to co chcesz.

  1. print_r(getPeriodSeries(1));


Ten post edytował rocktech.pl 10.04.2013, 10:20:32


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
MlodyJNTR
post 10.04.2013, 10:23:21
Post #5





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 18.10.2011

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


dzięki smile.gif ale właśnie przed chwilą znalazłem i przerobiłem fajny kod i wyszło mi to
  1. for($x=0;$x<1440;$x++) {
  2. $godzina = date('H:i');
  3. $czas = date('H:i', strtotime(''.$godzina.' -'.$x.' minutes'));
  4. echo $czas;
  5. }

i działa biggrin.gif
Go to the top of the page
+Quote Post
sowiq
post 10.04.2013, 10:34:29
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Kolego, pomyśl chwilkę i zoptymalizuj swój kod, bo w pętli robisz masę niepotrzebnych operacji.

Twój kod w każdej iteracji (1440 razy!) najpierw pobiera aktualny timestamp, później zamienia go na godzinę w formacie H:i, później za pomocą kosztownej funkcji strtotime zamienia to z powrotem na timestamp i znów na datę w formacie H:i. Czyli w jednej iteracji robisz 3 konwersje z tego samego na to samo.

Spróbuj tak:
1. Przed pętlą pobierasz aktualny timestamp (funkcja time) - wykona się to tylko raz
2. W każdej iteracji pętli, od zapisanego timestampu odejmujesz 60 (czyli po jednej minucie w każdej iteracji)
3. Konwertujesz timestamp na format H:i i wyświetlasz.

Będzie to o niebo szybsze i wydajniejsze. Zwracajcie uwagę na wydajność Waszych rozwiązań!
Go to the top of the page
+Quote Post
MlodyJNTR
post 10.04.2013, 10:37:39
Post #7





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 18.10.2011

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


ok zaraz przerobie smile.gif szybkość działania strony mi nie przeszkadza bo mam neta 20mb.
Go to the top of the page
+Quote Post
sowiq
post 10.04.2013, 10:38:52
Post #8





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(MlodyJNTR @ 10.04.2013, 11:37:39 ) *
szybkość działania strony mi nie przeszkadza bo mam neta 20mb.

Szybki internet pozwala Ci szybko ściągnąć wygenerowany na serwerze wynik działania skryptu. Ale tego jak długo będzie się to tam "mieliło", szybkość łącza nie zmieni.
Go to the top of the page
+Quote Post
MlodyJNTR
post 10.04.2013, 10:57:39
Post #9





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 18.10.2011

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


mam takie coś i mam problem po 1 data mi się wyświetla kilka razy ;/ jak zrobić aby tylko 1 raz się wyświetlała?
  1. $time = time() + (60 * 60 * 24);
  2. for($x=0;$x<1440;$x++) {
  3. $czas = $time-$x;
  4. $godzina = date('H:i', $czas);
  5. echo $godzina.', ';
  6. }
Go to the top of the page
+Quote Post
rocktech.pl
post 10.04.2013, 11:03:00
Post #10





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Jeszcze raz tym razem dostosowane do twoich potrzeb:

  1. /**
  2.  * Zwraca czas ...
  3.  *
  4.  * @param integer $SecondsInterval liczba sekund (min. 1 max. 3600 x 24)
  5.  *
  6.  * @return array
  7.  */
  8. function getPeriodSeries($SecondsInterval = 3600)
  9. {
  10. $begin = new DateTime('00:00:00');
  11. $end = new DateTime('23:59:59');
  12. $ranges = array();
  13. $interval = new DateInterval('PT0H00M' . $SecondsInterval . 'S');
  14. $daterange = new DatePeriod($begin, $interval, $end);
  15. foreach ( $daterange as $date ) {
  16. $ranges[] = $date->format("H:i");
  17. }
  18. return $ranges;
  19. }
  20.  
  21. print_r(getPeriodSeries(60));


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
mar1aczi
post 10.04.2013, 12:24:15
Post #11





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


Cytat(MlodyJNTR @ 10.04.2013, 12:29:40 ) *
a morza tak zrobić żeby z bazy danych tylko wyświetla ostatnie 24h

Użyj w zapytaniu klauzury where
Cytat(MlodyJNTR)
a resztę usuwa?

Usuwa? w jakim celu?

Ten post edytował mar1aczi 10.04.2013, 12:25:45


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
sowiq
post 10.04.2013, 12:36:44
Post #12





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(MlodyJNTR @ 10.04.2013, 11:57:39 ) *
mam takie coś i mam problem po 1 data mi się wyświetla kilka razy ;/ jak zrobić aby tylko 1 raz się wyświetlała?

Dzieje się tak dlatego, bo funksja time() zwraca timestamp, czyli czas w sekundach. A Ty chcesz odejmować minuty, a nie sekundy.

Zrób tak:
  1. $czas = time() + (60 * 60 * 24);
  2. for($x=0;$x<1440;$x++) {
  3. $czas -= 60;
  4. [...]
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.05.2024 - 04:19