Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odliczanie dni w których bedziemy w szkole
Forum PHP.pl > Forum > Gotowe rozwiązania
skubekk
Napisałem skrypt który odlicza dni robocze do pewnej daty. W moim przypadku są to dni do konca roku szkolnego. biggrin.gif Można w nim uwzględnić święta i inne wolne dni.
Może sie komuś przyda... laugh.gif

[php:1:5a1fad6f30]<?php
###Skrypt by .::SkUbEkK::.####
###Uszanuj moją prace i niekasuj tego komentarza###

$koniec_mk = mktime (0,0,0,6,25,2004);
$koniec_data = getdate($koniec_mk);
$koniec = $koniec_data[mday]." || ".$koniec_data[mon]." || ".$koniec_data[year];

##############Święta i inne dni wolne od szkoły#################
$wolne[] = "8 || 4 || 2004";
$wolne[] = "9 || 4 || 2004";
$wolne[] = "12 || 4 || 2004";
$wolne[] = "30 || 4 || 2004";
$wolne[] = "3 || 5 || 2004";
$wolne[] = "3 || 5 || 2004";
$wolne[] = "5 || 5 || 2004";
$wolne[] = "6 || 5 || 2004";
$wolne[] = "1 || 6 || 2004";
$wolne[] = "10 || 6 || 2004";
#################################################################
$ile_wolne=count($wolne);

$data = getdate();
$tablica_data = $data[mday]." || ".$data[mon]." || ".$data[year];

$oki = 0;
if($koniec >= $tablica_data){
while ($oki!=1)
{
$start = mktime(0,0,0,$data[mon],$data[mday],$data[year]);

for($i=$data[mday]; $i <= date(t,$start); $i++)
{
$start_dzien = mktime(0,0,0,$data[mon],$i,$data[year]);
$dzien = getdate($start_dzien);
$sprawdzany_dzien = $dzien[mday]." || ".$dzien[mon]." || ".$dzien[year];

for($x=0; $x<=$ile_wolne; $x++)
{
if ($wolne[$x] == $sprawdzany_dzien)
{
$zle++;
}
}

if ($dzien[wday] != "0" AND $dzien[wday] != "6")
{
$tablica_dni[]= $dzien[mday]." || ".$dzien[mon]." || ".$dzien[year];

if ($koniec == $sprawdzany_dzien)
{
echo "Do końca roku szkolnego pozostało:<b> ";
$ile_dni_do_konca = count($tablica_dni)-$zle;
echo $ile_dni_do_konca-1;
$oki=1;
echo " </b>dni w których będziemy w szkole<br>";
break;
}
}
}

$data[mon]++;
$data[mday]=1;

if ($data[mon]==13)
{
$data[mon] =1;
$data[year]++;
}

}

$tydzien = $ile_dni_do_konca/5;
$tydzien =explode(".", $tydzien);
$tydzien = $tydzien[0];
echo "czyli:<b> ".$tydzien."</b> tygodni nauki";
}else{echo "Rok szkolny już się skończył!!!";}
?>
[/php:1:5a1fad6f30]

EDIT: Skrypt został poprawiony.
cyngiel
a ten skrypt dziala myslalem zeby wlsnie tski zrobic ale by mi to z pol roku zajelo tongue.gif
luc
Zauwazylem pewna wade tego skryptu a sam nie potrafie poprawic.

Otoz jak ustawiam powiedzmy na dzien 1.05.2004 (i ustawie date na serwerze na ta samo) to tego dnia pokaze 1 dzien zamiast 0 ponadto jak przestawie date serwera na 2 maja to zawiesza skrypt sie. zamiast liczyc wstecz albo pozostac przy 0.
sleeppower
Ten skrypt napisałem sam i robi to samo co twój hehe. U mnie działa. Z resztą na podstawie tego można bardzo prosto zrobić wersje dla java script.
[php:1:6befa314e3]<?php
$d_form = $_POST['dzien'];
$m_form = $_POST['miesiac'];
$r_form = $_POST['rok'];
$miesiac_dni = array(31,29,31,30,31,30,31,31,30,31,30,31);
//tablica zwiera daty świąt format: miesiąc dzień
$swieta = array('1-1','12-24','12-25','12-26','11-11','4-11','4-12','6-10','5-1','5-3','4-8','4-9','4-13');
$data_przyszlosc = mktime('','','',$m_form,$d_form,$r_form);
$data_aktualna=mktime();
$roznica = $data_przyszlosc - $data_aktualna;
$ile_dni = floor($roznica/(24*60*60))+1;
$dzien=24*60*60;
if ($ile_dni==0)
{
echo 'To już dziś!';
exit;
}

echo 'Pozostało jeszcze '.$ile_dni.' dni';
$ile_2=0;
$ile_4=0;
for($i=0;$i<$ile_dni;$i++)
{
$data_inf=getdate($data_aktualna+($dzien*$i));
$dzien_tyg=$data_inf['wday'];
$dzien_mies=$data_inf['mday'];
$miesiac=$data_inf['mon'];
for($x=0;$x<count($swieta);$x++)
{
$swieto = explode('-',$swieta[$x]); // rozdzielenie zawartości zmienne tabicy $swieta na miesiac i dzien
if ($swieto[0] == $miesiac && $swieto[1] == $dzien_mies && $dzien_tyg<>0 && $dzien_tyg<>6)
$ile_4++;
}
if ($dzien_tyg==0 || $dzien_tyg==6)
$ile_2++;
}
echo '<br>';
$ile_3=$ile_dni-$ile_2;
echo 'Bez sobót i niedziel pozostało jeszcze '.$ile_3.' dni';
echo '<br>';
$ile_5=$ile_3-$ile_4;
echo 'Bez sobót, niedziel i wybranych świat pozostało '.$ile_5.' dni';
?>[/php:1:6befa314e3]
luc
Hm, skrypt napisany mniej przejzyscie, nie wiem gdzie wpisac dzien do ktorego ma odliczac, ponadto tablica swiat albo chaotyczna albo nie wiem o co w niej chodzi.
sleeppower
Skrpyt pobiera dane z formlarza html. Przecież na poczatku widać;)

A ta tablica to też jest opisana. Ppierwsza pozycja to miesiac a druga dzień.
Dla mnie jest wszystko jase no ale:)
luc
Czyli chaotycznie najpierw styczen potem grudzien zeby wrocic do kwietnia, teraz czaje przynajmniej.
sleeppower
kolejność w jakiej wstawisz daty do tablicy jest nie wazna
najwazniejsze aby bylo zgodne z przyjeta regula
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.