GIDForums  

Go Back   GIDForums > Computer Programming Forums > MySQL / PHP Forum
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
 
Thread Tools Search this Thread Rate Thread
  #1  
Old 26-Jul-2003, 11:35
andy andy is offline
New Member
 
Join Date: Jul 2003
Posts: 5
andy is an unknown quantity at this point

leave calculation


I have a code that calculate the duration between 2 dates, it can exclude saturday, sunday and public holiday.
OK, the problem now is I don't know how to calculate the balance.

1 new staff only can apply leave for maximum 18 days a year.
After 2 years he joined the company, he has 19 days. First 2 years he only has 18 days.
For example, he started at 01/01/2000, when come to 01/01/2003, he has 19 days a year.
When come to 01/01/2004, he has 20 days, when come to 01/01/2005, he has 21 days and so on.

Before he can apply the leave, the php will show the balance that he can apply the leave.
Lets say he has 16 days, he wants to apply from 01/07/2003 to 07/07/2003, 5 days(exclude saturday & sunday).
Then the script will minus the 5 days, (16-5=11) 11 days left, if the duration is large than 16 days, the script will prompt the error message.

Can you help me? Is it possible to do that? Thank you, thanx a lot...


----------------------------------------------------------------------------------------
This is the code that calculate the duration between 2 dates (exclude saturday & sunday)
----------------------------------------------------------------------------------------

<?php
function NumHolidays($Start, $End)
{
$dbConn = MySQL_Connect("localhost", "root", "") or
Die("Error connecting to Server");

MySQL_Select_DB("mw") or
Die("Error Connecting to Database");

$sSQL = "SELECT * FROM Holidays";

$recHolidays = MySQL_Query($sSQL) or
Die("Invalid Query");

$NumHolidays = 0;

while ($Holiday = MySQL_Fetch_Array($recHolidays))
{
$dtDate = StrToTime($Holiday["Date"]);
$dtStart = StrToTime($Start);
$dtEnd = StrToTime($End);

if (Date("m", $dtStart) < Date("m", $dtDate))
{
if (Date("m", $dtDate) <= Date("m", $dtEnd))
{
if (Date("d", $dtDate) <= Date("d", $dtEnd))
{
$NumHolidays++;
}
}
}
else if (Date("m", $dtStart) == Date("m", $dtDate))
{
if (Date("d", $dtStart) <= Date("d", $dtDate))
{
if (Date("m", $dtDate) <= Date("m", $dtEnd))
{
if (Date("d", $dtDate) <= Date("d", $dtEnd))
{
$NumHolidays++;
}
}
}
}
}

return $NumHolidays;
}

function count_workdays($date1,$date2){
$firstdate = strtotime($date1);
$lastdate = strtotime($date2);
$firstday = date(w,$firstdate);
$lastday = date(w,$lastdate);
$totaldays = intval(($lastdate-$firstdate)/86400)+1;

//check for one week only
if ($totaldays<=7 && $firstday<=$lastday){
$workdays = $lastday-$firstday+1;
//check for weekend
if ($firstday==0){
$workdays = $workdays-1;
}
if ($lastday==6){
$workdays = $workdays-1;
}

}else { //more than one week

//workdays of first week
if ($firstday==0){
//so we don't count weekend
$firstweek = 5;
}else {
$firstweek = 6-$firstday;
}
$totalfw = 7-$firstday;

//workdays of last week
if ($lastday==6){
//so we don't count sat, sun=0 so it won't be counted anyway
$lastweek = 5;
}else {
$lastweek = $lastday;
}
$totallw = $lastday+1;

//check for any mid-weeks
if (($totalfw+$totallw)>=$totaldays){
$midweeks = 0;
} else { //count midweeks
$midweeks = (($totaldays-$totalfw-$totallw)/7)*5;
}

//total num of workdays
$workdays = $firstweek+$midweeks+$lastweek;

}


return ($workdays);
} //end funtion count_workdays()

$date1 = "$FromDate";
$date2 = "$ToDate";
$Duration = count_workdays($date1, $date2) - NumHolidays($date1, $date2);

echo $Duration ;
?>
  #2  
Old 26-Jul-2003, 12:10
JdS's Avatar
JdS JdS is offline
Senior Member
 
Join Date: Aug 2001
Location: KUL, Malaysia
Posts: 3,371
JdS will become famous soon enough
A few things first:

It appears that there are 3 persons on this board asking the same question:
  • Skyloon
  • Loon
  • andy

This is unacceptable. You cannot expect people to help you if you act like you've got something to hide (by registering under different names).

There are reasons why members ignore a thread or a post here.

The reason why I chose to ignore the 2 previous posters (skyloon / Loon) is because he/they were helped here: http://www.desilva.biz/forum/viewtopic808.php and all I had asked in return for my time and effort was some feedback if the code had worked. NOTHING to this date. That's not very nice since I have limited time in a day and took the trouble to work out the code for you.

Think about this before you ask for help at any other forum on the WWW.
 
 

Recent GIDBlogToyota - 2009 May Promotion by Nihal

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Forum Jump

Network Sites: GIDNetwork · GIDWebHosts · GIDSearch · Learning Journal by J de Silva, The

All times are GMT -6. The time now is 13:30.


vBulletin, Copyright © 2000 - 2009, Jelsoft Enterprises Ltd.