Rekenen met tijd
Ik ben met mij site bezig en ik zit met een probleempje, ik heb een script waarbij je 2 datums moet opgeven en dan rekent het script uit hoeveel dagen/weken/maanden er tussen die twee datums zitten.
Het liefste zou ik een klein voorbeeld scriptje willen hebben.
Alvast bedankt! :)
Nog even een klein vraagje,
De datums mogen elkaar niet overlappen, hoe zouden jullie mij dat aanraden om dat aan te pakken.
Edit: Snelle reactie hier :D
Gewijzigd op 09/12/2005 20:05:00 door Knorfski
Dan:
Code (php)
Ik moet een camping systeem maken, en als er dan 2 mensen boeken dan mogen die tijden elkaar niet overlappen, anders heb je een dubbelboeking.
Maar dat is dus niet de bedoeling.. graag wat meer info.
En ik maak een management systeem voor een camping, dus als er een klant bij de balie staat en die zegt:'Ik wil graag een bungalowhuisje huren van 12-09-2005 tot 18-11-2005 huren' dan vuurt de balie medewerker een query af op de database en die komt terug met het resultaat: Huisje 1, 3, en 6 zijn nog vrij die tijd. de rest is al volgeboekt.
Maar ook dat als er geen plek meer is als hij dan ook een melding geeft als de camping vol is.
Je moet een query maken die tussen die dingen selecteerd
En bedankt Han,
Ik had het op die manier nog niet bekeken.
vb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$reservering_1 = '2005-12-12'; //einde eerste reservering
$reservering_2 = '2005-24-12'; //begin tweede reservering
$tijd1 = '2005-12-12'; // begin nieuwe reservering
$tijd2 = '2005-20-12'; // einde nieuwe reservering
if ($tijd1 >= $reservering_1 && $tijd2 < $reservering_2){
echo "dit huisje is vrij";
}
else{
echo "dit huisje is niet vrij";
}
?>
$reservering_1 = '2005-12-12'; //einde eerste reservering
$reservering_2 = '2005-24-12'; //begin tweede reservering
$tijd1 = '2005-12-12'; // begin nieuwe reservering
$tijd2 = '2005-20-12'; // einde nieuwe reservering
if ($tijd1 >= $reservering_1 && $tijd2 < $reservering_2){
echo "dit huisje is vrij";
}
else{
echo "dit huisje is niet vrij";
}
?>
Ik krijg nu een reeks cijfers eruit :S
<link href="paginas/css/lettertypen.css" rel="stylesheet" type="text/css" />
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
$tijd = date('Y-m-d');
$tijd1 = strtotime($tijd);
$tijd2 = strtotime('+1 day', $tijd);
$temp = $tijd1-$tijd2;
date('Y-m-d',$temp).' Verschil';
$dag1 = strftime ("%d", $tijd1);
$maand1 = strftime ("%m", $tijd1);
$jaar1 = strftime ("%Y", $tijd1);
$dag2 = strftime ("%d", $tijd2);
$maand2 = strftime ("%m", $tijd2);
$jaar2 = strftime ("%Y", $tijd2);
if($dag1 <> $dag2)
{
$temp1 = strftime ("%d", $temp);
$temp4 = strtotime($temp1);
}
if($maand1 <> $maand2)
{
$temp2 = strftime ("%m", $temp);
$temp5 = strtotime($temp2);
}
if($jaar1 <> $jaar2)
{
$temp3 = strftime ("%Y", $temp);
$temp6 = strtotime($temp3);
}
echo $temp4.$temp5.$temp6;
?>
$tijd = date('Y-m-d');
$tijd1 = strtotime($tijd);
$tijd2 = strtotime('+1 day', $tijd);
$temp = $tijd1-$tijd2;
date('Y-m-d',$temp).' Verschil';
$dag1 = strftime ("%d", $tijd1);
$maand1 = strftime ("%m", $tijd1);
$jaar1 = strftime ("%Y", $tijd1);
$dag2 = strftime ("%d", $tijd2);
$maand2 = strftime ("%m", $tijd2);
$jaar2 = strftime ("%Y", $tijd2);
if($dag1 <> $dag2)
{
$temp1 = strftime ("%d", $temp);
$temp4 = strtotime($temp1);
}
if($maand1 <> $maand2)
{
$temp2 = strftime ("%m", $temp);
$temp5 = strtotime($temp2);
}
if($jaar1 <> $jaar2)
{
$temp3 = strftime ("%Y", $temp);
$temp6 = strtotime($temp3);
}
echo $temp4.$temp5.$temp6;
?>
Probeer eens:
echo $temp4."-".$temp5."-".$temp6;
113410800011341260001134155100
het beste kun je dit doen met een datetime veld in een MySQL tabel. Voor twee afspraken die elkaar niet mogen overlappen stel je dan de volgende voorwaarde:
1) De begintijd van afspraak 1 moet NA de eindtijd van afspraak 2 liggen OF
2) De begintijd van afspraak 2 moet NA de eindtijd van afspraak 1 liggen.
in MySQL kun je een query opstellen die er zo uit ziet:
SELECT afspraak
FROM afspraken
WHERE
van < '$tot' AND tot < '$van'
Als die query 0 resultaten oplevert zijn er geen overlaps. Verder moet je natuurlijk controleren of de plekken gelijk zijn, zoals al gezegd werd
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
//Tijd nu vaststellen
$tijd = date('Y-m-d');
//String naar tijd omzetten
$tijd1 = strtotime($tijd);
//Even de tijd een dag ophoog zetten om te testen.
$tijd2 = strtotime('+1 day', $tijd);
//Tijden door elkaar delen
$temp = $tijd1-$tijd2;
//String van vandaag uitelkaar halen
$dag1 = strftime ("%d", $tijd1);
$maand1 = strftime ("%m", $tijd1);
$jaar1 = strftime ("%Y", $tijd1);
//String van de tijd van morgen uitelkaar halen.
$dag2 = strftime ("%d", $tijd2);
$maand2 = strftime ("%m", $tijd2);
$jaar2 = strftime ("%Y", $tijd2);
//Kijken als de dagen verschillen
if($dag1 <> $dag2)
{
$temp1 = strftime ("%d", $temp);
$temp4 = strtotime($temp1);
}
//Kijken als de maanden verschillen
if($maand1 <> $maand2)
{
$temp2 = strftime ("%m", $temp);
$temp5 = strtotime($temp2);
}
//kijken als de jaren verschillen
if($jaar1 <> $jaar2)
{
$temp3 = strftime ("%Y", $temp);
$temp6 = strtotime($temp3);
}
$result1 = strftime($temp6);
$result2 = strftime($temp5);
$result3 = strftime($temp4);
//De resulaten weergeven.
echo $result1.'-'.$result2.'-'.$result3;
?>
//Tijd nu vaststellen
$tijd = date('Y-m-d');
//String naar tijd omzetten
$tijd1 = strtotime($tijd);
//Even de tijd een dag ophoog zetten om te testen.
$tijd2 = strtotime('+1 day', $tijd);
//Tijden door elkaar delen
$temp = $tijd1-$tijd2;
//String van vandaag uitelkaar halen
$dag1 = strftime ("%d", $tijd1);
$maand1 = strftime ("%m", $tijd1);
$jaar1 = strftime ("%Y", $tijd1);
//String van de tijd van morgen uitelkaar halen.
$dag2 = strftime ("%d", $tijd2);
$maand2 = strftime ("%m", $tijd2);
$jaar2 = strftime ("%Y", $tijd2);
//Kijken als de dagen verschillen
if($dag1 <> $dag2)
{
$temp1 = strftime ("%d", $temp);
$temp4 = strtotime($temp1);
}
//Kijken als de maanden verschillen
if($maand1 <> $maand2)
{
$temp2 = strftime ("%m", $temp);
$temp5 = strtotime($temp2);
}
//kijken als de jaren verschillen
if($jaar1 <> $jaar2)
{
$temp3 = strftime ("%Y", $temp);
$temp6 = strtotime($temp3);
}
$result1 = strftime($temp6);
$result2 = strftime($temp5);
$result3 = strftime($temp4);
//De resulaten weergeven.
echo $result1.'-'.$result2.'-'.$result3;
?>
de uitkomst is:
1134155100-1134126000-1134108000
:S
Ik had je tutorial ook al gezien!
Zeer netjes.
Misschien moet ik dit maar vergeten en daarmee aan de slag :P
Net wat je wilt hoor. PHP kan ook rekenen met datum en tijd. Maar MySQL kan het beter, vind ik.
Het is opzich maar een heel simpel stukje script.