Gå til innhold

Står fast på et timeliste script. (tids regning)


Anbefalte innlegg

driver å programmerer en time liste

Står fast når det gjelder hvor mye overtid brukeren har jobbet.

 

La oss si at brukeren har 7,5timers arbeidsdag til vanlig men jobber overtid av og til..

og han jobber fra 08:00:00 til 15:30:00 til vanlig

men visst brukeren jobber til 18:00:00 så får han overtid.

 

Og ja. jeg teller med sekundene.

 

Hvor mye overtid har da brukeren?

I formatet 00:00:00

Lenke til kommentar
Videoannonse
Annonse
driver å programmerer en time liste

Står fast når det gjelder hvor mye overtid brukeren har jobbet.

 

La oss si at brukeren har 7,5timers arbeidsdag til vanlig men jobber overtid av og til..

og han jobber fra 08:00:00 til 15:30:00 til vanlig

men visst brukeren jobber til 18:00:00 så får han overtid.

 

Og ja. jeg teller med sekundene.

 

Hvor mye overtid har da brukeren?

I formatet 00:00:00

 

Du benytter time() til dette, håper jeg? Eller altså timestamp?

Lenke til kommentar
bruker timestamp() ja

 

Nice! Da er det jo bare trekke fra tidspunktet brukeren kom på jobb fra timestampen som bestemmer nåværende tidspunkt (eller eventuelt innskrevet slutt- tidspunkt). Dersom dette er over antall sekunder som tilsvarer ordinær arbeidstid, vil dette bli regnet som overtid. time() og date() lar deg regne til og fra timestamp.

Lenke til kommentar

Prøvde denne her

$TilEksisterende = '2008-09-15 16:00:00';

$FraEksisterende = '2008-09-15 08:00:00';

Splitter disse to variablene opp sånn at jeg sitter igjen med klokkeslettet.

 

Når jeg da prøver

 

$tid_paa_arbeid = "$timer:$minutter:$sekunder" - "$timer2:$minutter2:$sekunder2" ;

$overtid = date('G:i:s', $tid_paa_arbeid);

echo $overtid;

så får jeg 0:59:52 til svar..

 

$content = substr ( $FraEksisterende, 10, 20 );
$date = "$content";
list ( $timer, $minutter, $sekunder ) = split ( '[:]', $date );

$content = substr ( $TilEksisterende, 10, 20 );
$date = "$content";
list ( $timer2, $minutter2, $sekunder2 ) = split ( '[:]', $date );

$tid_paa_arbeid = "$timer:$minutter:$sekunder" - "$timer2:$minutter2:$sekunder2";
$overtid = date('G:i:s', $tid_paa_arbeid);
echo $overtid;

Lenke til kommentar
$tid_paa_arbeid = "$timer:$minutter:$sekunder" - "$timer2:$minutter2:$sekunder2";

 

Du regner her med (format) 00:00:00 - 00:00:00, noe som ikke gir deg riktig resultat. Du vil heller ønske å jobbe med noe ala (format) 1234567 - 1225567 som da vil si at du sitter igjen med 9000 sekunder (2,5 time).

Lenke til kommentar

$FraEksisterende = '2008-09-15 08:00:00';
$TilEksisterende = '2008-09-15 16:00:00';
$startTidspunkt = mktime($FraEksisterende);
$sluttTidspunkt = mktime($TilEksisterende);
$tid_paa_arbeid = $sluttTidspunkt - $startTidspunkt;
$overtid = date ( 'G:i:s', $tid_paa_arbeid );
echo $overtid;

fikk nå 1:00:00 som svar.. skal være 00:30:00

Lenke til kommentar
Gjest Slettet-rXRozPkg

Hadde du tatt en echo $start og echo $slutt, så ville du sett at de har samme verdi. Da kan man begynne å grave litt, og finne ut hvorfor.

 

Dette er ganske elementær debugging (finne ut verdi av variabler, og finne ut hvorfor de ikke har forventet verdi), og jeg håper du tar til deg akkurat dette. For å gjøre det litt lettere for deg så skal jeg si hva som er galt med en gang:

Du bruker helt gale parametere til mktime().

 

mktime() skal ikke ha en lang streng med dato, men tar opptil 7 enkle parametere.

 

Du kan f.eks. bruke substr() eller explode() (og/eller en kombinasjon av disse) for å dele opp til- og fra-datoene dine til et sett med variabler, og så sende det inn i mktime().

 

Lykke til :o)

 

Les om hvordan funksjonen brukes i PHP-manualen her: http://no2.php.net/mktime

Lenke til kommentar

Har nå delt opp $FraEksisterende og $TilEksisterende

 

$FraEksisterende = '2008-09-15 08:00:00';
$TilEksisterende = '2008-09-15 16:00:00';
// Deler opp $FraEksisterende
$FraSekunder = substr ( "$FraEksisterende", - 2 );
$FraMinutter = substr ( "$FraEksisterende", - 5, 2 );
$FraTimer = substr ( "$FraEksisterende", - 8, 2 );
$FraDag = substr ( "$FraEksisterende", - 11, 2 );
$FraManed = substr ( "$FraEksisterende", - 14, 2 );
$FraAr = substr ( "$FraEksisterende", - 19, 4 );
echo "$FraDag, $FraManed, $FraAr. $FraTimer, $FraMinutter, $FraSekunder <br />";
// Deler opp $TilEksisterende
$TilSekunder = substr ( "$TilEksisterende", - 2 );
$TilMinutter = substr ( "$TilEksisterende", - 5, 2 );
$TilTimer = substr ( "$TilEksisterende", - 8, 2 );
$TilDag = substr ( "$TilEksisterende", - 11, 2 );
$TilManed = substr ( "$TilEksisterende", - 14, 2 );
$TilAr = substr ( "$TilEksisterende", - 19, 4 );
echo "$TilDag, $TilManed, $TilAr. $TilTimer, $TilMinutter, $TilSekunder <br />";

$StartTidspunkt = mktime ( $FraTimer, $FraMinutter, $FraSekunder, $FraManed, $FraDag, $FraAr );
echo $StartTidspunkt;
echo "<br />";
$SluttTidspunkt = mktime ( $TilTimer, $TilMinutter, $TilSekunder, $TilManed, $TilDag, $TilAr );
echo $SluttTidspunkt;
echo "<br />";
$Overtiden = $SluttTidspunkt - $StartTidspunkt;
$overtid = date ( 'G:i:s', $Overtiden );
echo $overtid;

 

men når blir echo $overtid -> 9:00:00

Endret av slippern
Lenke til kommentar

$FraEksisterende = '2008-09-15 08:00:00';
$TilEksisterende = '2008-09-15 16:00:00';
$FraEksisterende = strtotime($FraEksisterende);
$TilEksisterende = strtotime($TilEksisterende);

$StartTidspunkt = $FraEksisterende;
echo $StartTidspunkt;
echo "<br />";
$SluttTidspunkt = $TilEksisterende;
echo $SluttTidspunkt;
echo "<br />";
$Overtiden = $SluttTidspunkt - $StartTidspunkt;
echo $Overtiden;
echo "<br />";
$overtid = date ( 'G:i:s', $Overtiden );
echo $overtid;

echo $Overtiden; -> 28800

echo $overtid; -> 9:00:00

Lenke til kommentar

$FraEksisterende = '2008-09-15 08:00:00';
$TilEksisterende = '2008-09-15 16:00:00';
$FraEksisterende = strtotime ( $FraEksisterende );
$TilEksisterende = strtotime ( $TilEksisterende );
$StartTidspunkt = $FraEksisterende;
$SluttTidspunkt = $TilEksisterende;
$Overtiden = $SluttTidspunkt - $StartTidspunkt;
$ArbeidsDag = 7.5 * 60 * 60;
$Overtiden = $Overtiden - $ArbeidsDag;
$overtid = date ( 'H:i:s', $Overtiden );
echo $overtid;

 

Får 1:30:00

 

i $Overtiden ligger det 1800..

1800/60 = 30.

Så hvorfor den legge til 1time det vet jeg ikke.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...