[PHP] Hoe maak je een tijdsduur vergelijking*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mensen,

Ik heb een een agenda. Nu wil ik weten of er in deze agenda een dubbele afspraak zit.
Ik heb nu deze mktime results gekregen na een foreach loop. Hoe kan ik de overlappingen
hieruit optellen? Dit voorbeeld heeft 3 overlappingen.

echo $v1['dStartOccupation']." - ".$v1['dEndOccupation']

result:

start - eind
(a) 1117447200 - 1117488600
(b) 1117432800 - 1117436400
(c) 1117440000 - 1117441800
(d) 1117443600 - 1117445400
(e) 1117434600 - 1117452600
(f) 1117434600 - 1117488600

Dus c heeft een overlapping met a. $dubbeleafspraak++;

Hoe pak ik dit aan?

Ik ben begonnen met:

if ( (start-b) >= (start-a) && (start-b) =< (eind-a) )

[ Voor 10% gewijzigd door Verwijderd op 30-05-2005 14:09 ]


Acties:
  • 0 Henk 'm!

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06 16:43

Varienaja

Wie dit leest is gek.

Nou.. als een bepaald aanvangs- of eindtijdstip binnen twee andere valt heb je een dubbele afspraak.

Voorbeeld:
13:30 - 14:30
12:30 - 16:00
16:15 - 16:30

Je loopt door alle tijdstippen, en je kijkt of dat tijdstip binnen een andere periode valt. In dit voorbeeld loopt dat direct mis op 13:30, want dat ligt tussen 12:30 en 16:00.

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat lijkt me ook.. maar hoe doet ik dat? en als het kan wil ik graag vasthouden aan de unix time

Acties:
  • 0 Henk 'm!

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06 16:43

Varienaja

Wie dit leest is gek.

Verwijderd schreef op maandag 30 mei 2005 @ 14:13:
Dat lijkt me ook.. maar hoe doet ik dat? en als het kan wil ik graag vasthouden aan de unix time
Sja.. met een for of een while loopje natuurlijk. Dat zou je moeten weten hoor..

code:
1
2
3
4
5
6
7
8
9
//dit is geen werkende code, maar illustreert mijn aanpak wel duidelijk.
collision=false;
index=0;
while not collision {
   for (int i;i<aantalperioden;i++) {
      collision = collision || periode[i].aanvang < tijdstip[index] < periode[i].einde
   }
   index++
}

[ Voor 6% gewijzigd door Varienaja op 30-05-2005 14:18 ]

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat weet ik ook, en toch kom ik er nog niet uit.... ik check jou antwoord even.

Probleem is dat de afspraken start tijden niet op volgorde staan van vroeg na laat

[ Voor 36% gewijzigd door Verwijderd op 30-05-2005 14:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als je deze gegevens in een database hebt staan kun je een query doen voordat je gaat opslaan en aangeven dat het een dubble afspraak is, en de gebruiker de gegevns aan laten passen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

West, hoe vaak moeten we jou nog op de quickstart wijzen? Ik zie geen taaltag in je titel, en uit je topicstart blijkt ook niet al teveel zelfwerkzaamheid. Lees die quickstart nou gewoon eens en hou je daaraan, dan hebben we allemaal meer plezier aan elkaar. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
sorry forgot it again 8)7 8)7 8)7

Wat ik je wel wil vragen is wat er mis is met de vraag
"Is er een PHP tegenhanger van PERL POD?"

Behalve die taal tag |:(

[ Voor 65% gewijzigd door Verwijderd op 30-05-2005 14:38 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 30 mei 2005 @ 14:18:
Dat weet ik ook, en toch kom ik er nog niet uit.... ik check jou antwoord even.

Probleem is dat de afspraken start tijden niet op volgorde staan van vroeg na laat
Dan zet je ze op volgorde? PHP kent aardig wat sorteerfuncties, en als de gegevens uit een database komen dan zijn er zat ideale oplossingen in SQL te verzinnen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dan zet je ze op volgorde? PHP kent aardig wat sorteerfuncties, en als de gegevens uit een database komen dan zijn er zat ideale oplossingen in SQL te verzinnen.
Dat is nu juist het probleem... het staat al in een foreach loop. Ik zou wel een sortArray kunnen maken
maar moet dat ook of kan het eenvoudiger?

Acties:
  • 0 Henk 'm!

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06 16:43

Varienaja

Wie dit leest is gek.

Verwijderd schreef op maandag 30 mei 2005 @ 14:31:
Dat is nu juist het probleem... het staat al in een foreach loop. Ik zou wel een sortArray kunnen maken
maar moet dat ook of kan het eenvoudiger?
Jazeker kan het eenvoudiger. Volgens mij is het namelijk nergens voor nodig om iets gesorteerd te hebben.

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Johnny Goodbye
  • Registratie: Augustus 2003
  • Laatst online: 19-09 09:15
gezien de summiere topicstartkan je niet de oplossing geven maar je moet zoeken in de trant van

code:
1
2
3
4
select * from agenda where
 (dStartOccupation>van and dStartOccupation<tot)  
 or  
 (dEndOccupation>van and dEndOccupation<tot)


de query levert dan bezette tijden op. Het controleert of de begintijd of de eindtijd binnen een bepaalde afspraak valt. Zodra 1 of meer records uitkomen is het dus een dubbele afspraak.

ik denk dat het ongeveer zo moet worden(let niet op het aantal haakjes. ben te lui op dat te gaan tellen)
if ( (start-b) >= (start-a) && (start-b) =< (eind-a) or (eind -b) >= (start-a) && (eind-b) =< (eind-a) )

[ Voor 27% gewijzigd door Johnny Goodbye op 30-05-2005 14:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks... ik zal mijn topic titels verbeteren.
Pagina: 1