webForumDet fria alternativet

Räkna ut skillnader i tid

PHP

5 svar · 997 visningar · startad av Inferis

Medlem sedan sep. 2000667 inlägg
Frågan#1

Vill någon vänlig själ hjälpa mig på traven? Får inte till det!

Jag vill räkna ut en arbetstid och kunna dra av olika saker. Alla uppgifter kommer från ett formulär som skickas.

$rakna_arbetstid = "" . $_POST['hours'] . "";
$rakna_mertid = "" . $_POST['mertid2'] . "";
$rakna_rasten = "" . $_POST['rast'] . "";
$rakna_kundtid = "" . $_POST['kundtid'] . ":" . $_POST['kundtid2'] . "";
$rakna_kontorstid = "" . $_POST['kontorstid1'] . ":" . $_POST['kontorstid2'] . "";

$arbetad_tid = strtotime($rakna_arbetstid);
$mertiden = strtotime($rakna_mertid);
$arbetad_rast = strtotime($rasten);
$kundtiden = strtotime($rakna_kundtid);
$kontorstiden = strtotime($rakna_kontorstid);

$ovriga_tiden = $kontorstiden + $kundtiden;
$rakna_ut_tiden = $arbetad_tid - $ovriga_tiden;

//Kolla mertid
$ett = $arbetad_tid + $mertiden;

//Dra av övrig tid
$tva = $ett - $arbetad_rast - $kontorstiden - $kundtiden;

echo("<table border=1 style='float:right;'>");
echo("<tr><td>Arbetad tid</td><td>" . $rakna_arbetstid . "</td><td>" . date("H:i", $arbetad_tid) . "</td></tr>");
echo("<tr><td>Mertid</td><td> + " . $rakna_mertid . "</td><td>" . date("H:i", $ett) . "</td></tr>");
echo("<tr><td>Rast</td><td> - " . $rasten . "</td><td></td></tr>");
echo("<tr><td>Kontorstid</td><td> - " . $rakna_kontorstid . "</td><td></td></tr>");
echo("<tr><td>Totalt</td><td></td><td>" . date("H:i", $rakna_ut_tiden) . "</td></tr>");
echo("<table>");
Medlem sedan juni 2012581 inlägg
#2

Hur ser dina inputs ut? Matar användaren in tidpunkter eller antal timmar/minuter?

Medlem sedan sep. 2000667 inlägg
#3

Det matas in som enbart timmar och minuter.
Echo blir exempel nedan:
$rakna_arbetstid = 9:00
$rakna_mertid = 2:30
$rakna_rasten = 0:30

Jag försöker göra är att få:
Arbetstid
+ mertid
- rast
- kundtid
osv

Medlem sedan juni 2012581 inlägg
#4

Räkna ut antal minuter per fält först så ska det inte vara några problem att addera och subtrahera så du får korrekt tid i minuter till sist. Efter detta kan du lätt konvertera till timmar och minuter igen enligt:

$minuter = 90; // Ditt resultat här
$h = intval($minuter / 60);
$m = $minuter % 60;

$h = timmar
$m = minuter

Medlem sedan sep. 2000667 inlägg
#5

prplxr skrev:

Räkna ut antal minuter per fält först så ska det inte vara några problem att addera och subtrahera så du får korrekt tid i minuter till sist. Efter detta kan du lätt konvertera till timmar och minuter igen enligt:

$minuter = 90; // Ditt resultat här
$h = intval($minuter / 60);
$m = $minuter % 60;

$h = timmar
$m = minuter

Det här förstod jag inte riktigt. Kan tillägga att matte inte är min starka sida.

Medlem sedan juni 2012581 inlägg
#6

Okidoki. Jag ska försöka förklara, men som matte, som du säger, inte är din starka sida är pedagogik verkligen inte min starka sida, hehe.

$minuter = 90; // Ditt resultat här

Här tilldelar du $minuter kort och gott totala antalet minuter som arbetats, dvs ditt resultat från din uträkning i minuter.

$h = intval($minuter / 60);

Detta dividerar totala antalet minuter med 60 (dvs, du får ut ett flyttal som representerar hur många timmar antalet minuter motsvarar). intval() ser till att ta bort allt efter decimaltecknet. Du får alltså ut hur många HELA timmar det går på ditt antal minuter.

$m = $minuter % 60;

Det här sättet att räkna på kanske inte alla känner till och kallas moduloräkning. Det gör samma uträkning som ovanstående, men istället för att lämna kvar svaret på divisionen så får du antalet hela minuter som blir kvar efter divisionen, dvs det som hamnar efter decimaltecknet. Som sagt, pedagogik är inte min grej. Hoppas det iaf gjorde dig lite klokare.

287 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
149 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
148 ms — ändringar (db)