
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>
<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
