Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] jak obliczyć dni robocze?
Forum PHP.pl > Forum > Przedszkole
ibalyx
daty mi jeszcze stwarzają problem smile.gif proszę o pomoc.

chcę przejść w pętli przez wiele dat i policzyć dni robocze. nie wiem jak popchnąć dzień do przodu o jeden.
ja to zrobiłem tak:
Kod
<!DOCTYPE html>
<html>
    <head>
        <style>
            body {font-size: 10px}
        </style>
    </head>
    <body>
        <form action="" method="post" />
            Data od: <input type="text" name="data_od" />
            Data do: <input type="text" name="data_do" />
            <input type="submit" name="submit" value="Oblicz" />
        </form>
        <hr />

<?php
    if(isset($_POST['submit'])) {
        // jeśli naciśnięto guzik
        $data_od = $_POST['data_od'];
        $data_do = $_POST['data_do'];
        $data_od = explode('-', $data_od);
        $data_do = explode('-', $data_do);

        $dzien_od = $data_od[0];
        $mies_od = $data_od[1];
        $dzien_do = $data_do[0];
        $mies_do = $data_do[1];
        $data_od = date('Y-m-d', mktime(0,0,0,$mies_od,$dzien_od,2013));
        $data_do = date('Y-m-d', mktime(0,0,0,$mies_do,$dzien_do,2013));
        echo '<p>data OD: <b>'.$data_od.'</b> - ';
        echo 'data DO: <b>'.$data_do.'</b> - ';
        $sek_od = strtotime($data_od);
        $sek_do = strtotime($data_do);
        $sek = $sek_do - $sek_od;
        $doba = 60*60*24;
        $dni = floor(($sek/$doba)+1);
        echo 'liczba dni: <b>'.$dni.'</b></p><hr />';

        $dni_robocze = 0;
        for($i=1; $i<=$dni; $i++){
            $dzien_od = intval($dzien_od, 0);
            $mies_od = intval($mies_od, 0);
            $data_od = date('N', mktime(0,0,0,$mies_od,$dzien_od,2013));
            $data = date('Y-m-d', mktime(0,0,0,$mies_od,$dzien_od,2013));
            echo $data.' - ';
            if($data_od == 7 or $data_od == 6) {
                echo '<span style="color: red">weekend.</span><br />';
            } else {
                if(
                    ($dzien_od == 1 and $mies_od == 1) or
                    ($dzien_od == 1 and $mies_od == 4) or
                    ($dzien_od == 1 and $mies_od == 5) or
                    ($dzien_od == 3 and $mies_od == 5) or
                    ($dzien_od == 30 and $mies_od == 5) or
                    ($dzien_od == 15 and $mies_od == 8) or
                    ($dzien_od == 1 and $mies_od == 11) or
                    ($dzien_od == 11 and $mies_od == 11) or
                    ($dzien_od == 25 and $mies_od == 12) or
                    ($dzien_od == 26 and $mies_od == 12)
                    ) {
                    echo '<span style="color: red">swieto!</span><br />';
                } else {
                    echo 'dzien roboczy.<br />';
                $dni_robocze += 1;
                }
            }
            $dzien_od += 1;
        }
        echo '<hr />dni roboczych: <b>'.$dni_robocze.'</b>';
    }
?>

    </body>
</html>


liczy ale tylko miesiącami. jak chcę więcej miesięcy to się gubi bo zmienna $dzien_od rośnie dalej(ponad 31).

napewno można to zrobić prościej smile.gif
mar1aczi
http://forum.php.pl/index.php?showtopic=29279
ibalyx
dzięki. nie myślałem, że to ktoś już napisał. przepraszam.
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.