I min databas har jag starttid och sluttid sparat i formatet yyyy-mm-dd hh:mm:ss nu skulle jag tex genom att loopa ut tiden se vilken tid som är på helgdagar samt efter klockan 1800-0800. Vart börjar man ? :)
MySQL är det. Skulle dock hellre se en funktion då jag tex vill använda det på 18-08, lör, sön samt kanske även lägga in vissa speciella datum som tex midsommar, julafton osv.
Det går ju alltid att joina några frågor så fungerar din rutin på alla ställen utom crystone som inte tillåter ens querys!!!???!!!.
Som den genuina procedur addic som jag så är en funktion som reder ut vad som var och inte var OB under arbetstiden det jag skulle förlusta mig med:-). Är inte vissa dagar halvdagar och registrerar du startdaum och starttid och stopdatum och stopptid eller registrerar du start datum och start tid och endast stopptid eller antal jobbade timmar ?
Ach... jag ser att du hade med tidsformatet i första frågan. då är det bara halvdagarna som är frågan
/Hasse
Finns två fält; Starttid och Sluttid båda i formatet yyyy-mm-dd hh:mm:ss tex starttid 2013-01-05 17:00:00 sluttid 2013-01-06 01:00:00 i koden räknar jag ut diffen i timmar (sparar även undan det) dvs 8.0. I fallet ovan är det dock OB för tiden mellan 18:00 och 01:00. Samtidigt som att hela lör och sön även dem är OB. Man behöver alltså bryta upp varje tidsintervall på ngt sätt.
OB:
18:00 tom 08:00
Alla lördagar och söndagar
Allmänna helgdagar ( kan jag hårdkoda in)
Hoppas att jag har fattat dig rätt nu.
Låt funktionen först reda ut om det är vardag och räkna ut tiden mellan 18:00 och sluttiden eller om det är helg räkna ut hela tiden.
Om du börjar en söndag kl 3 och slutar 11:00 på måndagen krävs det lite mer knep och knåp.
Precis, skulle nästan behöva loopa varje minut känns det som (använder inga sekunder) och se vad de är. Känner att man behöver lite hjälp på traven. Söndagsexemplet kommer inträffa.
Då behöver du reda ut om sluttiden är vardag eller helg och kanske börja räkna från 18 och till sluttiden förutsatt att sluttiden är mindre än midnatt , annars stoppar du vid midnatt. Sen om stopptiden är efter midnatt så räknar du fram till 8:00 förutsatt att stopptiden är en vardag annars räknar du tiden ut.
Nu blev det lite virrigt ,jag gör ett nytt försök om det blev obegripligt
Sådär, nu har jag komponerat ihop något. På sikt tror jag att jag vill göra skillnad på olika sorters OB och får väl då spara undan allt i en array. Funktionen kommer sen returnera värdet $total_ob
För att spara prestanda kommer jag endast köra funktionen då datan sparas så att den lägger in OB direkt i DB. Vore dock tacksam om någon ändå skulle vilja optimera koden, i den mån det är möjligt.
Känns lite brutalt att snurra igenom minut för minut och skulle det vara det vara i ett system med flera användare så ligger det i farans riktning att det kommer en system ansvarige med uppkavlade skjortärmar och knutna nävar. Samma personer brukar även kasta skitiga blickar efter en när man lägger lagrade procedurer i databasen :-).
Jag skulle kanske dela upp dygnet i 8-18 18-24 00-8 och reda ut hur många minuter som finns i dom olika intervallen genom funktionen round(abs($to_time - $from_time) / 60,2)
Knycket det här på nätet