Rekenen met weken
(Hiervoor heb ik hulp nodig bij het instellen van m'n domein en VPS, zie andere topic van mij)
Nou voeg ik mijn weken toe in het database als weeknr en jaarnummer
met alle gegevens. De datums laat ik genereren in het overzicht tijdens het bekijken, afdrukken, downloaden en versturen van de urenlijst.
Maandag_start, _eind, _opmerking
Dinsdag_start, _eind, _opmerking
...........
Zondag_start, _eind, _opmerking
Nou zou ik graag deze lijsten willen sorteren, of iig een overzicht per periode genereren.
Een periode van de gehele maand.
Hoe kan ik dit het beste doen, het eind van bijv. maand 7 kan in dezelfde week vallen als het begin van 8.
Ik zou graag willen proberen om het als volgt eruit te laten zien:
Periode | Uren gewerkt | Overuren | Afgerond |
---------+----------------+----------+----------+
januari | 120 | 40 | V |
---------+----------------+----------+----------+
februari | 120 | 32 | V |
---------+----------------+----------+----------+
......
---------+----------------+----------+----------+
juli | 80 | 5 | X |
---------+----------------+----------+----------+
Voor mijn iedee moet ik eerst kijken wat de allereerste weeknummer is dat in de database staat.
+->Kijken in welke periode de eerste dag van deze week valt.
+->Tot welke dag van de week deze periode valt en begindag van volgende periode tijdelijkopslaan indien deze in huidige week valt
+--> Voor elke dag van huidige periode de totalen weergeven, voor volgende periode tijdelijk opslaan.
Ik krijg de juiste manier maar niet op papier gezet en ik zit hier al een aantal dagen over te tobben.
(uiteindelijk moet de gebruiker kunnen aangeven in wat voor periodes de desbetreffende werkgever doet uitbetalen, zodat de gebruiker dit kan instellen op zijn account)
Toevoeging op 15/07/2013 09:49:12:
De grootste heuvel is dat een week het begin en een eind van een maand kan bevatten, zoals dat 31 juli en 1 augustus van dit jaar in week 31 vallen.
Gewijzigd op 15/07/2013 09:58:32 door Dennis WhoCares
Je begint gewoon al compleet verkeerd. Het feit dat je het in weken wil tonen of versturen, wil niet zeggen dat je het ook per week moet opslaan. Bedenk eens hoe het zou gaan werken als je het gewoon per dag opslaat...
+Urenlijsten
-wk_userid
-wk_datum
-wk_start
-wk_eind
-wk_opmerking
Maar ik vul wel complete weken in bij het toevoegen van mijn urenlijsten.
En ik zal dan voor elke dag (record van huidige user) apart gaan kijken in welke week het valt om het te weergeven in de 'week urenlijst' (buiten de periode overzicht)
Worden mijn 'view,download,print en send by mail "urenlijst" pagina's dan niet traag?
Gewijzigd op 15/07/2013 10:03:03 door Dennis WhoCares
Nou en? Wat maakt het nu hoe je het invult of gebruikt? De weekinfo (nummer, begin, eind, jaar) is allemaal direct af te leiden uit de datum. Alleen datum opslaan is dus genoeg. De rest is overbodige database vulling.
Erwin H op 15/07/2013 10:03:05:
Nou en? Wat maakt het nu hoe je het invult of gebruikt? De weekinfo (nummer, begin, eind, jaar) is allemaal direct af te leiden uit de datum. Alleen datum opslaan is dus genoeg. De rest is overbodige database vulling.
Je hebt absoluut gelijk. Bedankt voor de feedback, ik ga hiermee aan de slag.
Mijn database aanpassen, en dan eerst mijn praktijk examen voor rijbewijs ff halen.
Dan ga ik ermee door :)
Nogmaals bedankt, ik begin er hoop in te krijgen :p
Ik heb zelf enige tijd geleden ook iets soortgelijks gemaakt (om mijn eigen uren in de week bij te houden), en dat werkt met alleen datum opslaan. De rest komt allemaal uit die datum, ook de week en maand overzichten. Uiteindelijk vrij eenvoudig, dus jou zal het ook wel lukken.
Dus kan mn laatste rijles op mn buik schrijven en zal straks examen moeten doen, zonder ff op te kunnen warmen en met een nieuwe koppeling moet gaan afrijden.... (ach t zit me ook nooit mee xD)
Jawel het zal wel lukken, zit nou alleen het met invullen van de urenlijst. Want deze zijn wel per week.
En lijkt me niet heel handig om elke dag apart in te vullen.
Dan zal je die input moeten omrekenen naar dagen. Hoe krijg je het precies binnen?
gebruikers die ingelogd zijn kunnen hun urenlijsten enz invullen en wanneer deze volledig ingevuld zijn worden ze op zondag om 18:00 gemailed naar desbetreffende werkgever
Ik vulde voorheen gewoon een compleet formulier in:
Jaar:
Week:
Maandag, start(tijd):
eind(tijd):
dinsdag, start(tijd):
eind(tijd):
...
zondag, start(tijd):
eind(tijd)
Toevoeging op 15/07/2013 10:57:46:
Maar ik zal om het makkelijker te maken nog een veld week bijzetten, dat met het ophalen van incomplete urenlijsten dat ik die gewoon op weeknr kan opzoeken.
datums berekenen per week is makkelijk :)
Dennis WhoCares op 15/07/2013 10:56:39:
Maar ik zal om het makkelijker te maken nog een veld week bijzetten, dat met het ophalen van incomplete urenlijsten dat ik die gewoon op weeknr kan opzoeken.
datums berekenen per week is makkelijk :)
datums berekenen per week is makkelijk :)
Even googelen bracht me de volgende code:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$week_start = new DateTime();
$week_start->setISODate( $year, $week_no );
echo $week_start->format( 'd-M-Y' );
?>
$week_start = new DateTime();
$week_start->setISODate( $year, $week_no );
echo $week_start->format( 'd-M-Y' );
?>
Oftewel, als je het jaar en het weeknummer hebt dan echo je hiermee de start van de week (ik neem aan dus de maandag). Als je dus zo'n compleet ingevuld formulier krijgt met alleen het weeknummer is het op deze manier een fluitje van een cent om alle datums erbij te krijgen.
Disclaimer: te lui om nu te testen, werkt het dus niet dan ga ik nog even dieper graven.
Het gaat goed komen.hoop ik
Zit nu mijn falen te bedenken (ben gezakt.voor mn praktijkexamen :-( )
Jeroen VD op 15/07/2013 11:00:34:
onnodige databasevulling! gewoon 1 tabel met niets anders dan datum, starttijd en eindtijd, en een id. voor de rest kun je daar alles uithalen: bekijk deze tutorial eens: http://phphulp.jorendewit.nl/view/1/
dixi
dixi
Waarom zou dat onnodig zijn, want:
a) 70% van die datetime functies werken alleen in MySQL
b) als je een functie binnen een where gebruikt wordt geen gebruikt meer gemaakt van de index en dat kan bij grote tabellen de query aanzienlijk vertragen.
Quote:
Waarom zou dat onnodig zijn, want:
a) 70% van die datetime functies werken alleen in MySQL
b) als je een functie binnen een where gebruikt wordt geen gebruikt meer gemaakt van de index en dat kan bij grote tabellen de query aanzienlijk vertragen.
a) 70% van die datetime functies werken alleen in MySQL
b) als je een functie binnen een where gebruikt wordt geen gebruikt meer gemaakt van de index en dat kan bij grote tabellen de query aanzienlijk vertragen.
a) juist daarom, je krijgt schone data uit de database, je hoeft met php niet meer te klooien om het allemaal netjes te krijgen, dat doet sql als je het een beetje netjes in de query zet. bij het erin stoppen van de data moet je dan alleen wel alles in het juiste format zetten, dat is waar.
b) ik moet toegeven dat ik dat niet begrijp haha, maar dat is ook niet nodig als je met een id werkt, je vraagt gewoon alle data op die je wilt hebben (eventueel met tijdfunctie om de juiste format te bereiken) en in de WHERE staat alleen het id
Als je een applicatie bouwt die met meerdere databasesystemen moet kunnen werken, dan heb je het probleem dat per systeem de functies om het weeknr. uit de datum te extraheren verschillend zijn. Dat kan al een goede reden zijn om daarvoor gewoon een extra kolom te maken.
Dan trek je de voorbarige conclusie dat je altijd op alleen op id's kan of wilt filteren, wat ook niet is.
Het is vrij gebruikelijk om kolommen waarop je vaak filtert te indexeren, alleen heeft die index geen zin als je filtert op een bewerking op die kolom e.g:
En heb je al weer een goede reden voor die extra kolom.
oke, je hebt gelijk. excusé moi
Toch geweldig om eens de meningen van anderen te horen met onderbouwing
Maakt PHP5 het niet mogelijk om makkelijk te rekenen met weken?
Op zich heeft Ger wel een punt (twee), maar de vraag is wel in hoeverre het van toepassing is. Als je namelijk alleen een overzicht van een bepaalde week wilt maken, dan heb je heel dat weeknummer niet nodig in je query. Dat kan je ook eenvoudig doen door alle records met een datum tussen de maandag en de vrijdag te selecteren. Op die manier heb je dus en de date functies in MySQL niet nodig en je gebruikt gewoon de volledige datum waardoor de indexen gewoon nog werken.
Database technisch gezien is er helemaal niks mis met een kolom voor weeknr, want men kan wel stellen dat het weeknr af te leiden is uit de datum, maar dat geldt ook voor bv de stand van de maan.
In hoeverre iets van toepassing is afhankelijk van de toepassing.
Ik kijk er dus naar dat je dat wil vermijden tenzij het echt heel duidelijke voordelen heeft (die er dus wel degelijk zijn in bepaalde gevallen). Jij kijkt er zo te zien vanaf de andere kant naar, dat het beter is om het weeknummer wel op te slaan omdat je dan die mysql functies niet hoeft te gebruiken en nog wel de indexen ter berschikking hebt.
Het een beter dan het ander, nee, zoals altijd. Maar wel goed om beide standpunten te weten en te begrijpen, mag iedereen weer zijn eigen keuze maken.
Ger van Steenderen op 18/07/2013 19:38:38:
In hoeverre iets van toepassing is afhankelijk van de toepassing.
LOL