[PHP/MySQL] Berekenen van aantal dagen binnen periodes

Pagina: 1
Acties:
  • 810 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Daan
  • Registratie: Februari 2000
  • Laatst online: 20:00
Dag mensen,

Laat ik beginnen met de MySQL tabel die ik gebruik:

code:
1
2
3
4
5
6
7
8
9
Table: SEASONS
----------------------------------------------
| id |       name  |  startdate |    enddate |
----------------------------------------------
|  1 | spring 2007 | 2007-03-21 | 2007-06-20 |
|  2 | summer 2007 | 2007-06-21 | 2007-09-22 |
|  3 | autumn 2007 | 2007-09-23 | 2007-12-20 |
|  4 | winter 2007 | 2007-12-21 | 2008-03-19 |
----------------------------------------------


Ik ben op dit moment bezig met het maken van een pagina dat het aantal werkdagen per tijdsperiode tussen twee data dient te berekenen. Werkdagen kan hier ook bijvoorbeeld alleen de maandagen betekenen, of welke andere dag dan ook.

Dus, stel dat ik tussen de data 2007-06-18 en 2007-06-29 het aantal vrijdagen en zaterdagen wil weten, dan zou dit uiteindelijk het eindresultaat moeten zijn van de query:

code:
1
2
3
4
5
6
--------------------------------------------------------------------------
| id |       name  |  startdate |    enddate | fri | sat | other | total | 
--------------------------------------------------------------------------
|  1 | spring 2007 | 2007-06-18 | 2007-06-20 |   1 |   1 |     3 |     5 |
|  2 | summer 2007 | 2007-06-21 | 2007-06-29 |   1 |   0 |     5 |     6 |
--------------------------------------------------------------------------


Zoals je ziet loopt het seizoen "spring 2007" tussen 2007-06-18 en 2007-06-20 en het seizoen "summer 2007" tussen 2007-06-21 en 2007-06-29. Dit alles binnen de gegeven tijdsperiode van 2007-06-18 en 2007-06-29. Let wel: de tijdsperiode waartussen gezocht moet worden is wel variabel. De query bouw ik dus met PHP op.

Ik kan wel een stuk MySQL, maar queries als deze gaan echt mijn petje te boven. Ik weet niet eens of het uberhaubt alleen met MySQL te doen is, of dat er ook nog wat PHP bij komt kijken. Het berekenen van het totale aantal dagen tussen 2007-06-18 en 2007-06-29 is natuurlijk het probleem niet, het per tijdsperiode laten zien hoeveel vrijdagen en zaterdagen er in zitten wordt een stuk lastiger.

Ik heb uitgebreid gezocht met Google maar kan niet echt wat vinden dat ook toepasbaar is op mijn situatie. Kan iemand me op de goede weg helpen? Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
je kunt het m.i. op 2 manieren doen...

1. je maakt een aparte tabel met daarin alle dagen (eventueel tot 2099 ofzo) en gaat die joinen met je eigen tabel...
dan krijg je zoiets als:
SQL:
1
2
3
4
5
6
7
8
select count(datumtabel.datum) from
jouwtabel
left join 
datumtabel
on
datumtabel.datum >= jouwtabel.vandatum and datumtabel.datum <= jouwtabel.totdatum
where
weekday(datumtabel.datum) = 0 /* of 1,2,3,4,5,6 */


2.
manier 2 is dat je het in de PHP doet en dan gewoon een loopje doet van datumvan tot datumtot... en dan een teller ophoogt (of array waardes waarbij array[0] = maandag, array[1] = dinsdag... etcetera) ...

PS. ik heb nog wel een scriptje liggen waarmee alle feestdagen worden uitgerekend... laat maar weten of je daar behoefte aan hebt... (is in MSSQL gemaakt, maar zeer makkelijk om te zetten naar gewenste programmeertaal... is tenslotte een berekening)

[ Voor 16% gewijzigd door P.O. Box op 27-03-2007 23:00 ]


Acties:
  • 0 Henk 'm!

  • kunnen
  • Registratie: Februari 2004
  • Niet online
-

[ Voor 196% gewijzigd door kunnen op 27-03-2007 23:54 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Het idee dat mij meteen te binnen schiet is de PHP functie date().

Maak van je begindatum een timestamp en gebruikt date() met 'w' als format om het nummer van de dag terug te krijgen (een 0 voor zondag t/m een 6 voor zaterdag). Het aantal dagen van de week verandert niet, dus je kan het aantal dagen altijd delen door 7. Omdat je weet op welke dag je begindatum begint kan je de rest uitrekenen.

Acties:
  • 0 Henk 'm!

  • Daan
  • Registratie: Februari 2000
  • Laatst online: 20:00
Aan de hand van dit artikel ben ik verder gaan werken en ik heb het nu voor elkaar. Als query voor seizoenen gebruik ik het volgende:
[code=sql]SELECT *
FROM `seasons`
WHERE ('" . $phpdatum1 . "' BETWEEN `startdate` AND `enddate`)
OR ('" . $phpdatum2 . "' BETWEEN `startdate` AND `enddate`);[/code=sql]

Ik heb wel moeten veranderen dat de begin- en einddata van de seizoenen op elkaar aansluiten. Dus de startdatum van "summer 2007" moet hetzelfde zijn als de einddatum van "spring 2007". Anders werden het aantal dagen niet goed geteld door de functie count_business_days() uit bovenstaand artikel.

Het tellen van de werkdagen en weekend dagen wordt dus volledig door PHP gedaan aan de hand van het result van de query. Toch bedankt voor jullie hulp!