Gå til innhold

php og mysql dato funksjoner


Anbefalte innlegg

heisann, nå er det en stund (ca et år) siden jeg har drevet med php og mysql og sitter litt fast her. Har planer om å lage et script som regner ut timelønn ut fra klokkeslett fra-til. det jeg ønsker er altså å hente ut info fra en mysql database som innholder masse fra-til klokkeslett f.eks 08:00-16:00 og regne ut antall timer, så kan jeg gange antall timer med timelønn og legge til tillegg, trekke fra skatt osv. Spørmålet er om det bli enklest å bruke Date og Time funksjonene i Mysql eller i php og hvordan jeg skal konfigurere mysql tabellen (Hvilke atributter osv.) Noen som kan hjelpe meg litt i gang?

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+1374861

tja, lite action her så får prøve meg.

finnes vel en del relevante spørsmål som bør stilles i sammenheng med det du prøver å lage her.

 

skal timer kunne gå over flere dager?

if so, hvordan avgjøre om alle timene er eligable for lønn?

hvis de ikke skal kunne gå over flere dager, skal det kun være hele timer?

 

eksempelvis vil det jo, hvis du kun skal oppbevare hele timeantall som går over enkeltdager, være naturlig å bare ta ett heltall for starttime og ett heltall for sluttime.

hvor mange timer? slutt minus start.

 

derimot, hvis det skal kunne foregå over flere dager og alle timene skal være tellende synes jeg det er relevant å bruke time() som funker helt utmerket. men att alle timer over flere døgn er tellende virker noe unaturlig.

 

hadde vert interresant å høre litt mer om formål, forutsetninger osv før man kan svare fornuftig på hvordan du skal bygge opp databasen godt i denne sammenhengen.

 

finnes jo en del spesialiserte 'formater' på dette såvidt jeg forstår, men har personlig ikke satt meg så godt inn i det, men har mye god erfaring med bruk av time() på ulike måter. ikke spesielt human-readable, men veldig fleksibelt og enkelt å kna når du har dratt det ut av basen.

Lenke til kommentar

Jeg har satt meg litt inn i det nå og jeg har kommet fram til at unix timestamp det enkleste formatet å manipulere tid/dato på. Jeg har derfor laget en løsning der jeg velger dato (fra en drop-down liste) og skriver inn tiden jeg begynner i format hh:ss og tiden jeg slutter i samme format. Deretter lager jeg en unix timestamp av tiden jeg begynner på jobb og tiden jeg slutter. så er det bare å regne ut $timestamptil(tiden jeg slutter) - $timestamfra(tiden jeg begynner) og dermed får jeg tiden mellom start og slutt i sekunder. Hvis jeg deler dette tallet på 3600, har jeg antall timer på jobb.

 

Men så kommer den vanskelige biten. Jeg har andre variabler/betingelser som skal inn:

 

1. Hvordan regne ut antall timer på jobb? [LØST]

2. Arbeider jeg mer enn eller 6 timer har jeg rett til pause (30min), og denne får jeg ikke betalt for. Derfor må jeg trekke fra 0.5 timer hvis arbeidsdagen overstiger 6t. [LØST]

 

3. Tilleggene:

 

Hverdager 18:00 - 21:00: tillegg på (x) kroner per time

Lørdag 12:00 - 16:00: tillegg(samme som hverdager)

Lørdag 16:00 - 18:00: tillegg*2

Lørdag 18:00 - 19:00: tillegg*3

 

Søndager: 100% tillegg (timelønn*arbeidstimer)*2 [LØST]

 

4. Arbeidsdagen er alltid mellom 07:00 og 21:30 hverdager og 07:00 - 19:30 på lørdager. Søndager kan variere men arbeidsdagen foregår alltid på samme dag(strekker seg ikke over flere døgn)

 

5. En lønningsmåned strekker seg fra den 15. - 15. i neste måned.

Hvordan lage en smart løsning for å oppbevare dataen i mysql slik at jeg kan hente den frem slik jeg vil f.eks bla igjennom lønnsmåneder (pagination)?

 

skjema for input av data:

 

insertform.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Legg til info</title>
</head>
<body>
<h2>Legg til info</h2>

<form method="post" action="maketimestamp.php">

<select name="day">

<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>

</select>


<select name="month">

<option value="01">Jan</option>
<option value="02">Feb</option>
<option value="03">Mar</option>
<option value="04">Apr</option>
<option value="05">Mai</option>
<option value="06">Jun</option>
<option value="07">Jul</option>
<option value="08">Aug</option>
<option value="09">Sep</option>
<option value="10">Okt</option>
<option value="11">Nov</option>
<option value="12">Des</option>


</select>

<select name="year">
<option value="2007">2007</option>
<option selected value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
</select>

<br></br>
fra :<input name="fra" type="text" size="6">  til: <input name="til" type="text" size="6">
<br></br>
<input type="submit" value="Send">
</form>

</body>
</html>

 

Behandle info fra skjema

 

processform.php

<?php
$timelonn = ; //TIMELØNN I KR
$tilleg1 = ;//TILLEGG I KR
$day = $_POST["day"];
$month = $_POST["month"];
$year = $_POST["year"];

$fra = $_POST['fra'];
$til = $_POST['til'];

$biter = explode(":",$fra);
$biter2 = explode(":",$til);

$timefra = $biter[0];
$minuttfra = $biter[1];

$timetil = $biter2[0];
$timefra = $biter2[1];



$timestampfra = mktime($biter[0], $biter[1],0,$month, $day, $year);
$timestamptil = mktime($biter2[0], $biter2[1],0,$month, $day, $year);
$ukedag = date("w", $timestampfra); //FINNER UT HVILKEN UKEDAG DET ER I FORMATET 0-6 (0= SØNDAG 6= LØRDAG) 

$timer = ($timestamptil - $timestampfra)/3600; //KONVERTER SEKUNDER PÅ JOBB TIL TIMER

if($timer >= 6){ //HVIS ARBEIDSDAG OVERSTIGER 6t ELLER ER PÅ 6T, TREKK FRA EN HALVTIME (SE PUNKT 2)

$arbeidstimer = $timer - 0.5;

}


else{

$arbeidstimer = $timer;
}

$lonn = $timelonn * $arbeidstimer;

if($ukedag==0){ //HVIS UKEDAG ER SØNDAG, LEGG TIL 100% TILLEGG
$lonn = ($lonn*2);	
}


echo "$arbeidstimer<br/>";
echo "$lonn<br/>";



?>

 

Det jeg står litt fast på nå er hvordan jeg skal få scriptet til å ta hensyn til tilleggene(sannsynligvis kjøre en haug med if-statements) og å lage en smart løsning for å oppbevare,hente ut og vise data med mysql....

Endret av Tha_Zaynt
Lenke til kommentar

Den enkle måten er nok å registrere fra-til i et format hvor du også registrer dag, som UNIX-timestamp.

 

Her er litt psudo-ish-kode:

 

switch ( date( 'w', $startTime ) ) {
case 0 :
$periodStartTime = mktime( 16, 0, 0, date( 'm', $endTime ), date( 'd', $endTime ), date( 'Y', $endTime ) );
if ( $periodStartTime > $endTime ) {
$wage += ( ( $endtime - $periodStartTime ) / 3600 ) * ( $hourWage * $multi1 );
$endTime = $periodStartTime;
}
*det samme som over for neste lavere tidsperiode til slutt*
}
break;
case 6 :
*samme som over*
break;
default :
*samme som over*
break;
}

Endret av JohndoeMAKT
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...