Tjenare!
Håller på med en form av resursplanering, försöker beräkna lagd arbetstid/arbetsuppgift i stort sett.
Har byggt ett adminverktyg mha AJAX (prototype.js & scriptaculous.js from http://script.aculo.us, fruktansvärt smutt!), vid byte av uppgift uppdateras databasen, och jag kan där sätta starttid på uppgiften man börjar på, och sluttid på den man tidigare höll på med.
Systemet har stöd för flera "resurser" (personer), och jag vill kunna summera lagd tid/uppgift, arbetad tid/uppgift/person (Under viss tid, vecka, dag, månad, whatever)
Det jag kört fast på nu är hur jag skall beräkna tiden.
Ponera att jag har dessa fält i databasen;
uppgift (uppgift.ID), resurs (resurs.ID), in/ut (1/2), tid (unix timestamp?)
Ingen modifiering görs normalt vid hemgång (1700), och ingen på morgonen (0800).
Måste alltså på något höger räkna bort alla sekunder som är mellan 17:00 och 08:00 & all tid som är helgdag (v1 kan sakna stöd för storhelger... Men har ni något färdigt för det är jag ytterst tacksam )
Så; Några tips?
Allt detta görs i PHP5.0.4 & MySQL 4.1.11
Tidsberäkning, PHP/MySQL
Antal sekunder mallan 17.00 o 08.00 är konstant:
(15*60*60=54000sek)
En helg (fredag 17.00 - måndag 08.00) borde alltså vara:
(54000+(2*24*60*60)=226800sek (en kväll+2dygn)
Ett dygn = 24*60*60=86400sek
Alla de där sifforna retunerar dock mktime(), gärna i sammarbete med date() (läs på på www.php.net)...
Jag har faktiskt försökt något likande, men fann att det var ett rent helvete med helger...
Min funktion skulle gå ut på att räkna ut leveranstid och därmed räkna bort lördag, södnag. (Försökte inte med med helgdagar).
Jag fick det att funka innom vissa tidsintervall men inte alla så jag gav upp.
Här kommer mitt försök. Lyckas du göra ngt av den eller finner din egna väg så posta det gärna här!
(15*60*60=54000sek)
En helg (fredag 17.00 - måndag 08.00) borde alltså vara:
(54000+(2*24*60*60)=226800sek (en kväll+2dygn)
Ett dygn = 24*60*60=86400sek
Alla de där sifforna retunerar dock mktime(), gärna i sammarbete med date() (läs på på www.php.net)...
Jag har faktiskt försökt något likande, men fann att det var ett rent helvete med helger...
Min funktion skulle gå ut på att räkna ut leveranstid och därmed räkna bort lördag, södnag. (Försökte inte med med helgdagar).
Jag fick det att funka innom vissa tidsintervall men inte alla så jag gav upp.
Här kommer mitt försök. Lyckas du göra ngt av den eller finner din egna väg så posta det gärna här!
Code: Select all
function getFutureDate( $t )
{
echo "Now: ".date( 'Y-m-d' )." (".date('w', mktime(0, 0, 0, date('m'), date('d'), date('Y')) ) .")";
$posttime = work_mktime( date('Y'), date('m'), (date('d')+$t), $t );
echo "<br>Levdate ".$t." days: ".date( 'Y-m-d', $posttime )." (".date('w', work_mktime( date('Y'), date('m'), date('d'), $t ) ) .")";
}
function work_mktime($y=0, $month=0, $d=0, $t )
{
$start = floor( mktime(0, 0, 0, 0, $d, 0) / (60*60*24 ) );
$end = floor( mktime(0, 0, 0, 0, ($d+$t), 0) / (60*60*24 ) )+1;
$first = true;
for( $i=$start;$i<=$end;$i++ )
{
if( date( 'w', ($i*60*60*24) ) == 0 || date( 'w', ($i*60*60*24) ) == 6 ) $d++;
}
return mktime(0, 0, 0, $month, ($d+$t), $y);
}
Wepic Visions - www.wepic.se