Gå til innhold

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


Anbefalte innlegg

Skrevet

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

Videoannonse
Annonse
Skrevet
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?

Skrevet
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.

Skrevet
Ja. så langt har jeg og komment. men ikke lengere.

 

Da får du $overtid i riktig format (02:30:00) ved å skrive (sett at du har overtid):

 

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

Skrevet

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;

Skrevet
$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).

Skrevet

$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

Gjest Slettet-rXRozPkg
Skrevet

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

Skrevet (endret)

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
Skrevet

$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

Skrevet

Ettersom det jeg kan se, så har du ikke tatt høyde for hva som er normal arbeidstid i den koden der... Du har bare regnet ut total arbeidstid.

Skrevet

$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.

Skrevet

Eventuelt kan du lage din egen funksjon for å vise tids-intervaler, så er du ikke så avhengig av å være i riktig tidssone. Jeg ser hvertfall to slike på php.net. (Se etter distanceOfTimeInWords)

Skrevet

hvis du ikke gidder å regne på det, kan du jo ta en strtotime($arbeidslutt) og strtotime($arbeidsstart). Differansen er antall sekunder. Men strtotime er glad i litt mer input enn kun klokkeslett; f.eks. en dato. Les mer på php.net.

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...