Hjälp med tidrapportering i php

Permalänk

Hjälp med tidrapportering i php

hejsan, håller på med ett skript som ska göra det lättare för företaget jag jobbar på att rapportera in tid.

har gjort ett formulär där en anställd matar in börjar slutar och övertid, vill att scriptet ska räkna ur många timmar det är mellan Börjar och Slutar.

sen behöver jag även hjälp med att när tiden mellan börjar och slutar övergår 18:00 så ska resterande timmar läggas in i ob1 och om det över går 23:00 ska resterande timmar gå till ob2.

tex så här:

Börjar: 17:00

Slutar 01:00

ob1: 5h
ob2: 2h
totalt arbetade tim: 8

tacka på förhand!!!

Visa signatur

Jag har en dator, med lite skit i... ;)

www.kjohansson.se

Permalänk
Hedersmedlem

Du kan utföra aritmetik direkt på datum:

$ php -r 'echo strtotime("-4 hours -30 minutes") - strtotime("-5 hours");' 1800

Svaret ges i sekunder, vilket du lätt kan omvandla till timmar.

Experimentera med detta och strtotime() så löser du det.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Skrivet av phz:

Du kan utföra aritmetik direkt på datum:

$ php -r 'echo strtotime("-4 hours -30 minutes") - strtotime("-5 hours");' 1800

Svaret ges i sekunder, vilket du lätt kan omvandla till timmar.

Experimentera med detta och strtotime() så löser du det.

ska kolla lite på det där, men kan jag lösa ob räkningen också med det där?

Visa signatur

Jag har en dator, med lite skit i... ;)

www.kjohansson.se

Permalänk
Hedersmedlem

Eftersom < och > fungerar med tid så kan du kontrollera om en viss tid (startpunkt för OB) ligger mellan två givna tider (start och slut på arbete).

Märk även att du för att enkelt få ett tidsobjekt för klockan 18 en given dag kan använda

$obStart = strtotime("18:00"); print date("c", $obStart);

vilket ger output

2012-02-24T18:00:00+01:00

Jag hade löst det på detta sätt iaf, det är mest "rätt" och rättfram, och därmed enklast att sätta upp. Annars kan du ta datum, omvandla de till timangivelser med date() och sedan göra en massa egna if-satser och meck, men det _kommer_ leda till större problem än att lista ut hur man använder tid i PHP (som också är nyttigt i allmänhet). PHP har redan löst tidsberäkningsproblemet åt dig om du använder dess tidsobjekt.

Jag säger det inte högt, men strtotime() tar som default nuvarande tid som relativ tid. Om du anger ett tidsobjekt som andra argument så räknar den relativt detta:

$obStart = strtotime("18:00", strtotime("2010-01-01 13:37")); print date("c", $obStart);

vilket ger output

2010-01-01T18:00:00+01:00

$obStart är nu ett tidsobjekt som beskriver 2010-01-01 18:00.

För att få ut något av ovanstående bör du ha läst igenom manualsidor för date() och strtotime().

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Skrivet av phz:

Eftersom < och > fungerar med tid så kan du kontrollera om en viss tid (startpunkt för OB) ligger mellan två givna tider (start och slut på arbete).

Märk även att du för att enkelt få ett tidsobjekt för klockan 18 en given dag kan använda

$obStart = strtotime("18:00"); print date("c", $obStart);

vilket ger output

2012-02-24T18:00:00+01:00

Jag hade löst det på detta sätt iaf, det är mest "rätt" och rättfram, och därmed enklast att sätta upp. Annars kan du ta datum, omvandla de till timangivelser med date() och sedan göra en massa egna if-satser och meck, men det _kommer_ leda till större problem än att lista ut hur man använder tid i PHP (som också är nyttigt i allmänhet). PHP har redan löst tidsberäkningsproblemet åt dig om du använder dess tidsobjekt.

Jag säger det inte högt, men strtotime() tar som default nuvarande tid som relativ tid. Om du anger ett tidsobjekt som andra argument så räknar den relativt detta:

$obStart = strtotime("18:00", strtotime("2010-01-01 13:37")); print date("c", $obStart);

vilket ger output

2010-01-01T18:00:00+01:00

$obStart är nu ett tidsobjekt som beskriver 2010-01-01 18:00.

För att få ut något av ovanstående bör du ha läst igenom manualsidor för date() och strtotime().

du tror inte jag kan använda DateTime::diff?

Visa signatur

Jag har en dator, med lite skit i... ;)

www.kjohansson.se

Permalänk

1 tangentbord senare så har jag fått till tidrapporteringen, men tänkte att jag orkar inte logga in i databasen varje gång jag ska göra ngt med användare så har tänkt att jag ska göra adminkonto där jag sedan kan sköta allt ifrån, har tänk så att jag har en checkbox i registreringen och om man bockar i den så får admin id 1 men om jag inte bockar i den så blir admin id 0, men sedan vi inloggningen så vill den inte göra som jag vill att den ska göra, jag har skrivit in det i header så här

$_SESSION['ADMINID'] = ("SELECT * FROM members_area WHERE adminid"); if ($_SESSION['ADMINID'] = 1) header("Location: adminindex.php"); else header("Location: welcome.php");

Visa signatur

Jag har en dator, med lite skit i... ;)

www.kjohansson.se

Permalänk
Hedersmedlem
Skrivet av kjohansson:

1 tangentbord senare så har jag fått till tidrapporteringen, men tänkte att jag orkar inte logga in i databasen varje gång jag ska göra ngt med användare så har tänkt att jag ska göra adminkonto där jag sedan kan sköta allt ifrån, har tänk så att jag har en checkbox i registreringen och om man bockar i den så får admin id 1 men om jag inte bockar i den så blir admin id 0, men sedan vi inloggningen så vill den inte göra som jag vill att den ska göra, jag har skrivit in det i header så här

$_SESSION['ADMINID'] = ("SELECT * FROM members_area WHERE adminid"); if ($_SESSION['ADMINID'] = 1) header("Location: adminindex.php"); else header("Location: welcome.php");

Till att börja med så kör du inte queryn mot MySQL, så du försöker helt enkelt sätta $_SESSION['ADMINID'] till strängen "SELECT * FROM members_area WHERE adminid", inte resultatet av frågan (dessutom klagar PHP säkert på paranteserna).

Vad skulle hända om en användare helt enkelt skrev in "adminindex.php" som adress?

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Skrivet av phz:

Till att börja med så kör du inte queryn mot MySQL, så du försöker helt enkelt sätta $_SESSION['ADMINID'] till strängen "SELECT * FROM members_area WHERE adminid", inte resultatet av frågan (dessutom klagar PHP säkert på paranteserna).

Vad skulle hända om en användare helt enkelt skrev in "adminindex.php" som adress?

okej får ta och läsa på det där... sen med adminindex.php visst det skulle gå men för att få det så smidigt som möjligt för andra administratorer så tänkte jag lösa det så här (förtillfället vet jag att två admins kommer finnas)

Visa signatur

Jag har en dator, med lite skit i... ;)

www.kjohansson.se