Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Obliczanie czasu (w godzinach), tylko dni robocze
Forum PHP.pl > Forum > Przedszkole
8_pasarzer_NOSTROMO
Witam potrzebuje kod który obliczy ile godzin różnicy jest między dwoma datami (pole datatime) z uwzględnieniem weekendów, świąt i świąt ruchomych.
Np.
$od=2016-03-15 10:00:00
$do=2016-03-16 11:00:00
$wynik=25;

i żeby uwzględnił weekendy i świeta (ruchome też) co juz jest w funkcji.

$od=2016-03-15 10:00:00
$do=2016-03-18 11:00:00
Założmy że 16.03 i 17.03 to weekend $wynik=25;

Dotychczas do różnic w datach używałem funkcji nospor'a

  1. <?php
  2. function workDays($date1, $date2, $withStartDay = false) {
  3. $date1=strtotime($date1);
  4. $date2=strtotime($date2);
  5. if ($date2===$date1 && !$withStartDay) return 0;
  6. $char=1;
  7. if ($date1>$date2)
  8. {$datePom=$date1;$date1=$date2;$date2=$datePom;$char=-1;}
  9. $count=0;
  10. if (!$withStartDay)
  11. $date1=strtotime('+1 day',$date1);
  12. $date2=strtotime('+1 day',$date2);
  13. $lastYear = null;
  14. $hol=array('01-01','05-01','05-03','08-15','11-01','11-11','12-25','12-26');
  15. while ($date1<$date2) {
  16. $year = date('Y', $date1);
  17. if ($year !== $lastYear){
  18. $lastYear = $year;
  19. $easter = date('m-d', easter_date($year));
  20. $date = strtotime($year . '-' . $easter);
  21. $easterSec = date('m-d', strtotime('+1 day', $date));
  22. $cc = date('m-d', strtotime('+60 days', $date));
  23. $hol[8] = $easter;
  24. $hol[9] = $easterSec;
  25. $hol[10] = $cc;
  26. }
  27. $weekDay=date('w',$date1);
  28. $md = date('m-d',$date1);
  29. if (!($weekDay==0 || $weekDay==6 || in_array($md,$hol) || $year>2010 && $md=='01-06')) {
  30. $count++;
  31. }
  32. $date1=strtotime('+1 day',$date1);
  33. }
  34. $count*=$char;
  35. return $count;
  36. }
  37. ?>


Ale ona liczy pięknie ino same daty bez godzin. Czy idzie ja jakoś zamienic by spełaniałą załozenia z wstępu ?
Johnas
Sam napisz sobie taką funkcję... od większej daty unixowej odejmujesz datę o mniejszej wartości po czym otrzymujesz wynik w sekundach jaki czas minął od daty mniejszej do daty większej. Aby otrzymać

dni:
$dni =$wynik/86400// Do tego dodaj funkcję aby pokazywało całości a nie wynik z przecinkiem
godziny:
$godziny = $wynik/3600; // Do tego dodaj funkcję aby pokazywało całości a nie wynik z przecinkiem

od godzin odejmujemy dni:
$godziny_bez_dni = ($wynik-($dni*86400))/3600;

Coś takiego... pisane na szybko
8_pasarzer_NOSTROMO
To co napisałęś jest proste jak sikanie, ale mam problem by z czasookresu od-do, wyrzucić dni wolne od pracy (sobota, niedziela i all swieta w tym kraju nad Wisłą).

$od=2016-03-15 10:00:00 piątek
2016-03-16 sobota
2016-03-17 niedziela
$do=2016-03-18 11:00:00 poniedziałek

Jak zliczyć ile godzin mineło od do bez weekendu.
phpion
Policz ile masz dni wolnych (weekendy, święta) między tymi dwoma datami i odejmij odpowiednią ilość godzin. Jeśli dni wolne będziesz trzymał np. w bazie to zwykłe COUNT(*) i BETWEEN wystarczą.
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.