Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> datediff z pominięciem przedziału czasowego
Kishin
post
Post #1





Grupa: Zarejestrowani
Postów: 148
Pomógł: 17
Dołączył: 20.12.2011

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


Witam,

Potrzebuje policzyć róznice w czasie pomiędzy dwoma datami, jakąś wprowadzoną przez użytkowania i teraźniejszą.
Jednak czas niema się liczyć w przedziale 22:00 do 07:00

  1. function datediff( $date1, $date2 )
  2. {
  3. $diff = abs( strtotime( $date1 ) - strtotime( $date2 ) );
  4.  
  5. return sprintf
  6. (
  7. "%d dni, %d godziny , %d minuty, %d sekundy",
  8. intval( $diff / 86400 ),
  9. intval( ( $diff % 86400 ) / 3600),
  10. intval( ( $diff / 60 ) % 60 ),
  11. intval( $diff % 60 )
  12. );
  13. }
  14.  
  15. echo datediff( $create_date, "now" ) . "\n";


tak licze sobie różnice, ale jak zrobić aby nie liczył konkretnego przedziału nie bardzo mam pomysł.
Ktoś pomoże?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Liczysz trzy wartości, których suma będzie odpowiedzią:
1. Ile sekund jest pomiędzy $create_date, a godziną 22 dnia wskazywanego przez $create_date.
2. Ile pełnych dni jest pomiędzy $create_date, a chwilą obecną. Liczbę tę mnożysz przez 54000 (ilość sekund pomiędzy 07:00, a 22:00).
3. Ile sekund jest pomiędzy 07:00 dnia dzisiejszego, a aktualną godziną.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Zanim zaczniemy rozwiązywać ten problem, zastanów się czy to ma sens. Dla uproszczenia przykładu załóżmy, że przedział wyłączony to 00:00 - 06:00. Wtedy różnicę 4 dni pokażemy jako "3 dni". Jaki w tym sens? Kto się w tym połapie?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Zapewne chodzi o roboczogodziny
Go to the top of the page
+Quote Post
Kishin
post
Post #5





Grupa: Zarejestrowani
Postów: 148
Pomógł: 17
Dołączył: 20.12.2011

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


Cytat(Crozin @ 29.07.2014, 09:39:32 ) *
Liczysz trzy wartości, których suma będzie odpowiedzią:
1. Ile sekund jest pomiędzy $create_date, a godziną 22 dnia wskazywanego przez $create_date.
2. Ile pełnych dni jest pomiędzy $create_date, a chwilą obecną. Liczbę tę mnożysz przez 54000 (ilość sekund pomiędzy 07:00, a 22:00).
3. Ile sekund jest pomiędzy 07:00 dnia dzisiejszego, a aktualną godziną.


coś takiego wydaje się działać:

  1. function datediff( $date1, $date2 )
  2. {
  3. $diff = abs( strtotime( $date1 ) - strtotime( $date2 ) );
  4. //Ile sekund jest pomiędzy $create_date, a godziną 22 dnia wskazywanego przez $create_date.
  5. $diffnoc=strtotime( $date2 )-(strtotime(date('Y-m-d'))+79200);
  6. if($diffnoc>0)
  7. $diff=$diff-$diffnoc;
  8. //Ile pełnych dni jest pomiędzy $create_date, a chwilą obecną
  9. $diffdays=round(abs(strtotime($date1)-strtotime($date2))/86400)*32400;
  10. if($diffdays>0)
  11. $diff=$diff-$diffdays;
  12.  
  13.  
  14.  
  15. return sprintf
  16. (
  17. "%d dni, %d godziny , %d minuty, %d sekundy",
  18. intval( $diff / 86400 ),
  19. intval( ( $diff % 86400 ) / 3600),
  20. intval( ( $diff / 60 ) % 60 ),
  21. intval( $diff % 60 )
  22. );
  23. }
  24.  
  25. echo datediff( $create_date, "now" ) . "\n";



Powiedz mi tylko po co 3 punkt? ten czas jest liczony przy odejmowaniu dwóch głównych dat wiec wydaje się zbędne.
Przy okazji miedzy 22:00 a 07:00 jest 32400 sekund a nie 54000 smile.gif
W każdym razie dzięki za pomoc.


Cytat(SmokAnalog @ 29.07.2014, 09:40:44 ) *
Zanim zaczniemy rozwiązywać ten problem, zastanów się czy to ma sens. Dla uproszczenia przykładu załóżmy, że przedział wyłączony to 00:00 - 06:00. Wtedy różnicę 4 dni pokażemy jako "3 dni". Jaki w tym sens? Kto się w tym połapie?


Tak jak poniżej napisał Pyton_000 chodzi o roboczogodziny, czas jest liczony na realizacje zlecenia a ten nie jest liczony w przedziale 22:00-07:00 wink.gif


Go to the top of the page
+Quote Post
SmokAnalog
post
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


To nie lepiej pokazać go jako sumę godzin? Nie jestem przekonany do nazywania X godzin dniami, kiedy X <> 24.
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Punkt trzeci jest potrzebny jeżeli potrzebujesz dokładności "co do godziny", nie "co do dnia" - w drugim przypadku faktycznie będzie zbędny.
2. Przedziały 0700 - 2200 i 2200 - 0700 trochę się różnią. wink.gif
Go to the top of the page
+Quote Post
Kishin
post
Post #8





Grupa: Zarejestrowani
Postów: 148
Pomógł: 17
Dołączył: 20.12.2011

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


Cytat(SmokAnalog @ 29.07.2014, 12:04:25 ) *
To nie lepiej pokazać go jako sumę godzin? Nie jestem przekonany do nazywania X godzin dniami, kiedy X <> 24.

W sumie racja, tak będzie chyba bardziej czytelnie, dzięki za sugestie.


Cytat(Crozin @ 29.07.2014, 12:07:27 ) *
1. Punkt trzeci jest potrzebny jeżeli potrzebujesz dokładności "co do godziny", nie "co do dnia" - w drugim przypadku faktycznie będzie zbędny.
2. Przedziały 0700 - 2200 i 2200 - 0700 trochę się różnią. wink.gif

1.Mam dokładność co do godziny i bez pkt trzeciego smile.gif.
2. A ja gdzies pisałem o przedziale 07-22? biggrin.gif

w każdym razie mam to o co mi chodziło.
Jeszcze raz dzięki za pomoc.

Pozdrawiam
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 Aktualny czas: 21.08.2025 - 02:40