Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Podział przedziału czasowego na poszczególne dni
alex19
post 23.11.2015, 10:46:22
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Mam jakiś zadany przedział czasu, np 2015-11-22 22:20:15 do 2015-11-23 02:13:11.
Teraz chciałby z takiego przedziału uzyskać dwa dla tych dni czyli
1. 2015-11-22 22:20:15 -> 2015-11-22 23:59:59
2. 2015-11-23 00:00:00 -> 2015-11-23 02:13:11

Wyciągnięcie z mojego przedziału dat to nic trudnego i w sieci jest masa przykładów, ale nie mogę nigdzie znaleźć czegoś takiego dla czasu.

Jedyne co mi się udało znaleźć to to:
  1. $start_date = '27:04:2013';
  2. $start_time = '16:30';
  3. $end_date = '29:04:2013';
  4. $end_time = '22:30';
  5.  
  6. // Date input strings and generate a suitable DatePeriod
  7. $start = DateTime::createFromFormat("d:m:Y H:i", "$start_date $start_time");
  8. $end = DateTime::createFromFormat("d:m:Y H:i", "$end_date $end_time");
  9. $interval = new DateInterval('P1D');
  10. $period = new DatePeriod($start, $interval, $end);
  11.  
  12. foreach ($period as $date) {
  13. // Get midnight at start of current day
  14. $date_start = clone $date;
  15. $date_start->modify('midnight');
  16.  
  17. // Get 23:59:59, end of current day
  18. // (moving to midnight of next day might be good too)
  19. $date_end = clone $date;
  20. $date_end->modify('23:59:59');
  21.  
  22. // Take care of partial days
  23. $date_start = max($start, $date_start);
  24. $date_end = min($end, $date_end);
  25.  
  26. // Here you would construct your array of
  27. // DateTime pairs, or DateIntervals, as you want.
  28. "%s -> %s \n",
  29. $date_start->format('Y-m-d H:i'),
  30. $date_end->format('Y-m-d H:i')
  31. );
  32. }


ale niestety to działa prawidłowo tylko jeśli w przedziale minęło więcej niż 24h sad.gif

Go to the top of the page
+Quote Post
nospor
post 23.11.2015, 15:14:08
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Chodzi ci o podzielenie tego na pol? Nic prostrzego:
1) liczysz roznice miedzy koncem a poczatkiem (w sekundach)
2) Dzielisz roznice na pol
3) Wynik sekund dodajesz do pierwszego czasu


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 23.11.2015, 15:39:45
Post #3





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

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


1. Znajdź pełne dni.
2. Reszta, która zostanie będzie kawałkiem dnia od godziny startowej i/lub kawałkiem dnia do daty końcowej.
Suma powyższych to wszystkie zakresy.


--------------------
Go to the top of the page
+Quote Post
alex19
post 23.11.2015, 21:22:21
Post #4





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Cytat(nospor @ 23.11.2015, 15:14:08 ) *
Chodzi ci o podzielenie tego na pol? Nic prostrzego:


Nie, nie na pół.

Jak będzie data od 2015-11-21 11:11:11 do 2015-11-23 21:00:01, to potrzebuję:
2015-11-21 11:11:11 - 2015-11-21 23:59:59
2015-11-22 00:00:00 - 2015-11-22 23:59:59
2015-11-23 00:00:00 - 2015-11-23 21:00:01
Go to the top of the page
+Quote Post
Tomplus
post 23.11.2015, 22:22:08
Post #5





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Trueblue ci podpowiedział już. Znajdź pełne dni.

a potem pobaw się datami i czasami

Go to the top of the page
+Quote Post
trueblue
post 24.11.2015, 12:04:51
Post #6





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

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


A jeszcze prościej będzie chyba przeiterować od daty (bez czasu) startowej do daty końcowej (również bez czasu) i utworzyć zakres dat z godzinami od 00:00:00 do 23:59:59. Potem zmienić godzinę startową pierwszego zakresu na zakładaną i podobnie z godziną końcową ostatniego zakresu.


--------------------
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: 12.06.2025 - 17:55