Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt który pokazuje wszystkie daty przez 24h
MlodyJNTR
post
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
 
Start new topic
Odpowiedzi (1 - 11)
mlawnik
post
Post #2





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

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


-1 minuta i w pętlę? (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
MlodyJNTR
post
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
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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
MlodyJNTR
post
Post #5





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

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


dzięki (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
sowiq
post
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
Post #7





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

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


ok zaraz przerobie (IMG:style_emoticons/default/smile.gif) szybkość działania strony mi nie przeszkadza bo mam neta 20mb.
Go to the top of the page
+Quote Post
sowiq
post
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
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
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));
Go to the top of the page
+Quote Post
mar1aczi
post
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
Go to the top of the page
+Quote Post
sowiq
post
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 00:39