hallo iedereen,
Ik ben bezig met een script te maken wat tot bedoeling heeft om het aantal werkdagen dat iemand moet wachten te berekenen. Dus de bedoeling is:
iemand geeft een datum in (liefst heb ik dat er standaard die van vandaag staat) en deze moet dan kunnen selecteren of hij of zij standaard of premium is (60 werkdagen of 30 werkdagen wachten) en als hij/zij dan op berekenen drukt moet de datum na de 30 of 60 werkdagen eruit komen. Ik ben niet echt gevorderd op gebied van php, en heb een aantal bestaande scripts in combinatie van eigen html samengegooid en kom tot onderstaand resultaat voorlopig :P

<?php

/*

i-Bridge Systems Software Solutions
http://www.ibridge.co.uk

Copyright (c) 2006 i-Bridge Systems & www.ibridge.co.uk
for more information, products or support contact simon AT ibridge.co.uk or support AT ibridge . co . uk

*/

class clsWorkDays {

//
//Class : Hold all the functions to help when calculating dates
//Params
// :
//

var $holidays = array();
var $holiday_dates = array();
var $seconds_per_day = 86400;
var $sunday_val = "0";
var $saturday_val = "6";

function clsWorkDays( $p_type='UU' ) {

//
//Function : constructor to automaticaly set the list of holidays.
//Params
// : p_type this param can be used when adding other countrys holidays
// Returns
// : sets of holidays

//
// future dates may be found from the same place i looked
// http://www.dti.gov.uk/employment/bank-public-holidays/index.html
// or for previous try
// http://www.dti.gov.uk/employment/bank-public-holidays/bank-public-holidays/page18893.html
//


//

if ( $p_type=='US' ) {

$this->holidays[] = new Holiday("Nieuwjaarsdag", $this->get_timestamp("2008-01-01"));
$this->holidays[] = new Holiday("Martin Luther King dag", $this->get_timestamp("2008-01-21"));
$this->holidays[] = new Holiday("President dag", $this->get_timestamp("2008-02-18"));
$this->holidays[] = new Holiday("Memorial dag ", $this->get_timestamp("2008-05-26"));
$this->holidays[] = new Holiday("Independence dag", $this->get_timestamp("2008-07-04"));
$this->holidays[] = new Holiday("Labor dag", $this->get_timestamp("2008-09-01"));
$this->holidays[] = new Holiday("Dag van colombus", $this->get_timestamp("2008-10-13"));
$this->holidays[] = new Holiday("Veteranendag", $this->get_timestamp("2008-11-11"));

$this->holidays[] = new Holiday("Thanksgiving", $this->get_timestamp("2008-11-27"));
$this->holidays[] = new Holiday("Kerstmis", $this->get_timestamp("2008-12-25"));

}

//go fill array to enable fast searches
foreach ( $this->holidays as $holiday_date ) {
$this->holiday_dates[] = $holiday_date->date;
}

}

function days_diff($p_start_date, $p_end_date = NULL, $p_workdays_only = TRUE, $p_skip_holidays = TRUE){

//
//Function : Main function to calculate the number of days or work days between 2 dates. If no end date passed
// in then this can be used to identify if the day is a working day as the function will return 1 or 0
//Params
// : p_start_date This paramter is the range starting date
// : p_end_date This paramter is the range ending date (can be null)
// : p_workdays_only This paramter is set if you DO NOT want to count weekends
// : p_skip_holidays This paramter is set if you DO NOT want to count standard Bank Holidays & enforced business shutdowns
// Returns
// : number of days between the 2 dates or if no end date passed in then 1/0 if the start day is a work day
//

$end_date = $p_end_date;
if ( strlen($p_end_date)==0 ) $end_date = $p_start_date;

$end_date = strtotime($end_date);
$start_date = strtotime($p_start_date);
$nbr_work_days = 0;

for($day_val = $start_date; $day_val <= $end_date; $day_val += $this->seconds_per_day){
$pointer_day = date("w", $day_val);
if($p_workdays_only == true){
if(($pointer_day != $this->sunday_val) AND ($pointer_day != $this->saturday_val)){
if($p_skip_holidays == true){
if(!in_array($day_val, $this->holiday_dates)){
$nbr_work_days++;
}
}else{
$nbr_work_days++;
}
}
}else{
if($p_skip_holidays == true){
if(!in_array($day_val, $this->holiday_dates)){
$nbr_work_days++;
}
}else{
$nbr_work_days++;
}
}
}
return $nbr_work_days;
}


function get_timestamp($p_date){

//
//Function : internal function to convert a date from mySQL fmt to unix timestamp
//Params
// : p_date This paramter takes a date in the format yyyy-mm-dd
// Returns
// : a unix timestamp
//

$date_array = explode("-",$p_date); // split the array

$the_year = $date_array[0];
$the_month = $date_array[1];
$the_day = $date_array[2];

$the_timestamp = mktime(0,0,0,$the_month,$the_day,$the_year);
return($the_timestamp); // return it to the user
}

}



class Holiday{

//
//Class : Create and hold the list of bank holidays and enforced business shutdowns
//Params
// :
// Returns
// : array of holidays
//

public $name;
public $date;

//constructor to automaticaly define the details of each holiday as it is created.
function holiday($name, $date){
$this->name = $name; // Holiday title
$this->date = $date; // Timestamp of date
}
}

?><i>Kies de datum van cash out</i><br>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
Dag: <select name="day">
<option value="1">1</option>
<option value="2">2</option>
<option value="2">3</option>
<option value="2">4</option>
<option value="2">5</option>
<option value="2">6</option>
<option value="2">7</option>
<option value="2">8</option>
<option value="2">9</option>
<option value="2">10</option>
<option value="2">11</option>
<option value="2">12</option>
<option value="2">13</option>
<option value="2">14</option>
<option value="2">15</option>
<option value="2">16</option>
<option value="2">17</option>
<option value="2">18</option>
<option value="2">19</option>
<option value="2">20</option>
<option value="2">21</option>
<option value="2">22</option>
<option value="2">23</option>
<option value="2">24</option>
<option value="2">25</option>
<option value="2">26</option>
<option value="2">27</option>
<option value="2">28</option>
<option value="2">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select> Maand: <select name="month">
<option value="1">Januari</option>
<option value="2">Februari</option>
<option value="3">Maart</option>
<option value="4">April</option>
<option value="5">Mei</option>
<option value="6">Juni</option>
<option value="7">Juli</option>
<option value="8">Augustus</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select> Jaar: <select name="year">
<option value="08">2008</option>
<option value="09">2009</option>
<option value="10">2010</option>
<option value="11">2011</option>
</select> <br/>
<input type="hidden" name="go" value="1" /><input type="submit" name="Calculate" value="Bereken"/>
</form>
<p></p>

<?php
echo $_POST['Calculate'];
?>


al bedankt voor jullie hulp

yorick
Denk je zelf ook niet dat je beter zelf eens zou beginnen bij het begin?

Je begint direct met klasses te werken nog voor je weet hoe je een string opbouwt.

Die options steek je uiteraard in in for lus.

De dag van vandaag zoeken:
date("Y-m-d", time());
ja sorry :P ben php beginner... wat moet ik dan precies verbeteren?
bedankt voor je hulp
uhu, snap ik... ben ook bezig met op mn eentje simpelere dingen ivm. php te leren. Nu is het lastige dat ik dit script eigelijk zo snel mogelijk nodig heb. Moest er nu geen haast bij zijn, had ik het op mijn gemakje zelf uitgezocht maar zoals ik al zei zit er bij deze nogal haast :P daarom ook mijn "oproep" naar vriendelijke mensen van PHPhulp om me te verbeteren :P
Ik heb een voorbeeldje voor je gemaakt:
<?php
ini_set ('display_errors', 1);
error_reporting (E_ALL);

setlocale (LC_ALL, 'nl_NL');
$vandaag = time ();
$aantal_werkdagen = 0;
$aantal_berekende_werkdagen = 30;
$i = 0;
do {
$timestamp_volgende = strtotime ('+' . $i++ . ' day', $vandaag);
$weekdag = strftime ('%a', $timestamp_volgende);
if ($weekdag != 'za' && $weekdag != 'zo') {
$aantal_werkdagen++;
}
} while ($aantal_werkdagen <= $aantal_berekende_werkdagen);
echo strftime ('%d-%m-%Y', $timestamp_volgende);
?>
dankje Jan, hier kom ik al een heel eind mee... eigelijk het enige wat nu nog moet gebeuren is dat ik met een dropdown menuutje ofzo de datum kan selecteren, en met een radiobutton 30 of 60 werkdagen selecteren. Probleem is dat ik niet goed snap hoe ik de geselecteerde waarden uit die dropdown en uit de radiobutton in mijn php script moet aangeven.
html tags:
http://www.web-source.net/html_codes_chart.htm

Bij een select box:
<select name="dag_van_de_maand">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
...
</select>


Dit kan je opvangen met $_POST['dag_van_de_maand'];
De value van de geselecteerde option zal dan doorgegeven worden.

radio button: (als ik me niet vergis; niet getest en niet te veel gebruikt de laatse tijd)

<INPUT type="radio" name="option" value="Option 1"> Option 1
<INPUT type="radio" name="option" CHECKED  value="Option 2"> Option 2
<INPUT type="radio" name="option"  value="Option 2"> Option 3


Zorg dat de name gelijk is. De value van de geselecteerde option staat in $_POST['option'];
ok, ik heb het er nu ongeveer ingestoken, en krijg nu hetvolgende:
http://dutchbuxto.com/calculator.php

het komt denk ik doordat in het script nergens gedefinieerd staat waar het deze moet gebruiken. Maar ik snap niet goed hoe ik van $_POST['dag_van_de_maand'];
$_POST['maand'];
$_POST['jaar'];

naar een datum kan gaan... hetzelfde met $_POST['soort']; ... hoe moet ik het opnemen in het script zodat ie in het ene geval met 60 werkdagen rekent en in het andere geval met 30? omdat het anders een boeltje wordt heb ik het script ff in een rtfje gezet:
www.dutchbuxto.com/calculator.rtf

al bedankt
Kijk, wat ik in jouw code zie:

Je toont eerst je formulier.
Daarna ga je doodleuk kijken naar wat er in de POST staat.

Ofwel toon je het formulier, ofwel behandel je de post. Niet de twee samen.

Een formulier is het volgende (over het algemeen)
Je hebt een <form method="..." action="..."> dan heb je input velden en onderaan een submit knop.

Druk je op de submit knop, dan word je naar een php file gestuurd. Die file zet je in action="...

In die file (bv. post.php) bekijk je wat de gebruiker gepost heeft.
In post.php kan je dus doen wat je wil met $_POST['maand'] en $_POST['jaar']. Je kan ze bv. in een databank steken.

yorick schreef op 15.07.2008 19:53
... Nu is het lastige dat ik dit script eigelijk zo snel mogelijk nodig heb. Moest er nu geen haast bij zijn, had ik het op mijn gemakje zelf uitgezocht maar zoals ik al zei zit er bij deze nogal haast :P ...


Wat jij van ons eigenlijk vraagt, is dat we de volledige site voor jou schrijven. Indien iemand dat wil doen, fijn. Misschien kan je het posten bij aanvragen.

Indien je het zelf wil schrijven, is er geen korte weg. Jij moet eerst zelf weten wat een string is en hoe je ze opbouwt. Jij moet weten wat een formulier is en hoe je de post opvangt. Jij moet weten hoe je verbinding maakt met een databank.

Vlug vlug php leren, bestaat niet. Doe het grondig, stap voor stap, begin bij het begin, ... of laat het aan anderen over.

Kijk eens bij tutorials over gastenboeken, mySQL, rekenen met variabelen, strings.

POST kan zeer gevaarlijk zijn. Indien je het niet goed beschermt, kunnen mensen (van kwade wil) bv. miljoenen e-mails sturen via je server. Resultaat: server kan plat gaan. Jij zal dat dan moeten uitleggen. Het is niet verantwoord daarmee te experimenteren zonder een elementaire kennis.-

Als je concrete vragen hebt, wil ik ze met plezier beantwoorden.
oke, ik snap wat je bedoelt, het is nu ook niet de bedoeling een hele site te maken, juist hulp met dit script. Ik zal het proberen zoveel mogelijk zelf uit te zoeken maar ik zit nog altijd met de vraag hoe ik nu van de 3 waarden die uit het formulier komen ( $_POST['dag_van_de_maand'] , $_POST['maand'] , $_POST['jaar'] ) tot een datum kom? Hoe moet ik deze dus zogezegd achter elkaar zetten zodat ik een datum bekom die ik in de variabele $vandaag kan steken (naam van die variabele moet ik later nog aanpassen)

dit is nu men calculator.php waarin de form zit:

<select name="dag_van_de_maand">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>

<select name="maand">
<option value="1">Januari</option>
<option value="2">Februari</option>
<option value="3">Maart</option>
<option value="4">April</option>
<option value="5">Mei</option>
<option value="6">Juni</option>
<option value="7">Juli</option>
<option value="8">Augustus</option>
<option value="9">September</option>
<option value="10">Oktober</option>
<option value="11">November</option>
<option value="12">December</option>
</select>

<select name="jaar">
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
</select>
<p><INPUT type="radio" name="soort" CHECKED value="60"> Standaard (60 werkdagen)</p>
<p><INPUT type="radio" name="soort" value="Option 2"> Premium (30 werkdagen)

<form action='bereken.php' method='submit'>
<input type="submit" name="submit" value="Bereken datum">
</form>



=========

en dit is de bereken.php die de datum berekent



<?php
ini_set ('display_errors', 1);
error_reporting (E_ALL);

setlocale (LC_ALL, 'nl_NL');
if ($_POST['soort'] == 30)
{

$type_aanvraag = 30

}

elseif ($_POST['soort'] == 60)
{

$type_aanvraag = 60

}

$dag_aangevraagd =htmlentities( $_POST['dag_van_de_maand'] .'-'. $_POST['maand'] .'-'. $_POST['jaar'] );
$aantal_werkdagen = 0;
$aantal_berekende_werkdagen = $type_aanvraag
$i = 0;
do {
$timestamp_volgende = strtotime ('+' . $i++ . ' day', $dag_aangevraagd);
$weekdag = strftime ('%a', $timestamp_volgende);
if ($weekdag != 'za' && $weekdag != 'zo') {
$aantal_werkdagen++;
}
} while ($aantal_werkdagen <= $aantal_berekende_werkdagen);
echo strftime ('%d-%m-%Y', $timestamp_volgende);
echo($datum)
?>

Reageren