Vertrek datum, aankomst datum en wat er tussen zit

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Teun Hesseling

Teun Hesseling

07/03/2012 10:45:33
Quote Anchor link
Ik moet een klein boeking systeempje maken voor een bed and breakfast. Nu ben ik al een eind op weg, maar loop nog tegen 1 dingetje aan. Misschien is het iets simpels misschien is het wel heel ingewikkeld. Maar de vraag is: Ik heb een veld met een aankomst datum en een veld met een Vertrek datum. Stel dat is 7-3-2012 en 9-3-2012. Die zit ik in een database. Dat is geen probleem. Maar ik heb nu als volgt een kalender, en op die kalander wil ik aangeven hoeveel plaatsen per dag nog over zijn. nu krijg ik dus alleen maar 7-3-2012 en 9-3-2012, hoe zorg ik ervoor dat ik ook 8-3-2012 meeneem?
 
PHP hulp

PHP hulp

27/11/2024 17:27:21
 
Gerhard l

gerhard l

07/03/2012 10:49:30
Quote Anchor link
Met between: klik
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/03/2012 10:53:16
Quote Anchor link
met NOT BETWEEN:
SELECT id FROM bab WHERE '2012-03-08' NOT BETWEEN aankomst AND vertrek
 
Teun Hesseling

Teun Hesseling

07/03/2012 10:53:19
Quote Anchor link
Nee dat is niet het gene wat ik zoek Gerhard, maar bedankt.

Toevoeging op 07/03/2012 10:55:34:

hmm NOT BETWEEN, zal dat is een proberen.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/03/2012 11:04:21
Quote Anchor link
als je alleen maar het aantal vrije plaatsen wilt weten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT count(id) AS aantalvrij FROM bab
WHERE '2012-03-08' NOT BETWEEN aankomst AND vertrek
 
Teun Hesseling

Teun Hesseling

07/03/2012 11:08:56
Quote Anchor link
naja dat moet per datum aangeven worden in een kalender, dat je dus per dag ziet hoeveel plaatsen er nog over zijn.
 
Erwin H

Erwin H

07/03/2012 11:43:42
Quote Anchor link
Kijk heel goed uit met de uiteinden. Als je bijvoorbeeld wilt weten of een kamer vrij is, dan moet je niet de boekingen selecteren die op die dag aflopen. Met het statement dat Ger geeft gaat dat denk ik niet goed.
Als je bijvoorbeeld een boeking hebt van 2012-03-07 tot 2012-03-08 dan selecteert MySQL dat voor beide dagen, terwijl het natuurlijk maar een nacht is.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/03/2012 11:59:42
Quote Anchor link
Dan bouw je in PHP de query op met UNION:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$sql
= "
    SELECT DATE(NOW()) AS datum, count(id) AS aantalvrij FROM bab
    WHERE DATE(NOW()) NOT BETWEEN aankomst AND
    DATE_ADD(vertrek INTERVAL -1 DAY)"
. PHP_EOL;
for ($i=1, $1<7, $i++) {
    $sql .= "UNION". PHP_EOL .
        "SELECT DATE(DATE_ADD(NOW() INTERVAL " . $i .
        " DAY) AS datum, count(id) AS aantalvrij FROM bab
        WHERE  DATE(DATE_ADD(NOW() INTERVAL "
.$i .
        " DAY) NOT BETWEEN
        aankomst AND DATE_ADD(vertrek INTERVAL -1 DAY)"
. PHP_EOL;
}

?>
Gewijzigd op 07/03/2012 12:06:56 door Ger van Steenderen
 
Erwin H

Erwin H

07/03/2012 12:05:46
Quote Anchor link
Of je kan gewoon een dag aftrekken van de vertrek datum in je query.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/03/2012 12:07:36
Quote Anchor link
Lol, heb het zojuist gewijzigd
 
Teun Hesseling

Teun Hesseling

07/03/2012 12:41:07
Quote Anchor link
bedankt voor alle hulp. heb echter nog 1 klein vraagje, tenminste als die klein is. hoe kan ik ervoor zorgen dat ik alle tussenliggende de datums heb. dus vertrek 7-3-2012 aankomst 10-3-2012.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
    $vertrek
= '7-3-2012';
    $aankomst = '10-3-2012';
    /*magische functie hiero die ineens alle 4 de datums produceert.
    uitkomst:
    $datum1 = '7-3-2012';
    $datum2 = '8-3-2012';
    $datum3 = '9-3-2012';
    $datum4 = '10-3-2012';
    */
    
?>

en dan nu dus zonder sql.
Gewijzigd op 07/03/2012 12:41:35 door Teun Hesseling
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/03/2012 13:32:04
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$tussen
= array();
$temptime = strtotime('2012-03-07');
$aankomst = strtotime('2012-03-10');
while ($temptime <= $aankomst) {
    $tussen[] = strftime('%d-%m-%Y', $temptime);
    $temptime += 86400;    
}


?>

edit: niet goed opgelet, je wilt ze allemaal
Gewijzigd op 07/03/2012 13:39:32 door Ger van Steenderen
 
Teun Hesseling

Teun Hesseling

07/03/2012 13:35:57
Quote Anchor link
haha je was net voor ik wouw net dit posten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    $aankomst
= '7-3-2012';
    $vertrek = '10-3-2012';
    $aankomst2 = strtotime($aankomst);
    $vertrek2 = strtotime($vertrek);
    $verschil = $vertrek2 - $aankomst2;
    $dagen = $verschil / 86400;
    echo $dagen.'<br>';
    for($i = 1; $i<$dagen; $i ++){
        echo $aankomst + $i.'<br>';
    }

?>


krijg ik als uitkomst:
3
8
9

maar je was met net voor
 
Gerhard l

gerhard l

07/03/2012 14:09:14
Quote Anchor link
Dit is een mogelijkheid:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$aankomst
= date_create('2012-03-07');
$vertrek = date_create('2012-03-10');
$verschil = date_diff($aankomst, $vertrek);
for($i=1;$i<=$verschil->d;$i++){
    $dag_ertussen = date_add($aankomst, date_interval_create_from_date_string('1 day'));
    echo date_format($dag_ertussen, 'Y-m-d').'<br/>';
}

?>


Alleen met maandenwisselingen moet je nog even kijken naar $verschil->m. En ik denk dat je dit veeel beter met mysql kan doen.
Gewijzigd op 07/03/2012 14:57:16 door gerhard l
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/03/2012 15:09:36
Quote Anchor link
gerhard, je moet voor de date functies die jij gebruikt wel PHP 5.3 .x of hoger hebben.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.