sluitingsdagen
Momenteel heb ik een dynamise openingsuren schema
het laat de dagen van de week zien, selecteert welke dag het vandaag is en of de winkel open of dicht is.
Ook wordt er telkens weergeven of er na vandaag binnen de 7dagen een feestdag is en indien dit het geval is komt er de melding "uitzonderlijk gesloten wegens feestdag". alleen ben ik nu aan het zoeken voor een manier om ook sluitingsdagen toe te voegen.
Deze zijn opgeslagen in mysql tabel.
wat ik momenteel heb:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$sql = "SELECT * FROM Openingsuren WHERE Datum BETWEEN '$D1' AND '$D7' ORDER by id DESC";
$query = mysql_query($sql);
while($row = mysql_fetch_array($query))
{
echo 'MYSQLDATE: '.htmlspecialchars($row['Datum']).'</br>';
}
$query = mysql_query($sql);
while($row = mysql_fetch_array($query))
{
echo 'MYSQLDATE: '.htmlspecialchars($row['Datum']).'</br>';
}
ik zou enkel de waardes die worden terug gestuurd moeten kunnen controleren welke dag dit is en er dan een variabel aan toevoegen zodat deze kan worden gewijzigd van "open" naar "uitzonderlijk gesloten".
Zo bewerk ik mijn feestdagen:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$D1 = date('Y/m/d'); // huidige dag
$D7 = date('Y/m/d', strtotime("+7 day"));// huidige dag + 7 dagen
$HOLIDAY1 = date('Y/m/d', mktime (0,0,0,1,1,$Jaar)); // Nieuwjaar
if ($HOLIDAY1 > $D1 && $HOLIDAY1 < $D7){
$IsFeestDag = 1;
$da = new DateTime($HOLIDAY1 );
$DvW = $da->format("N"); //DvW = Dag Van Week (maandag, dinsdag,...)
$DT = new DateTime($HOLIDAY1 );
$DaT = $DT->format("d/m/Y");} // Sluitings datum wordt op Dag/Maand/Jaar weergeven
$D7 = date('Y/m/d', strtotime("+7 day"));// huidige dag + 7 dagen
$HOLIDAY1 = date('Y/m/d', mktime (0,0,0,1,1,$Jaar)); // Nieuwjaar
if ($HOLIDAY1 > $D1 && $HOLIDAY1 < $D7){
$IsFeestDag = 1;
$da = new DateTime($HOLIDAY1 );
$DvW = $da->format("N"); //DvW = Dag Van Week (maandag, dinsdag,...)
$DT = new DateTime($HOLIDAY1 );
$DaT = $DT->format("d/m/Y");} // Sluitings datum wordt op Dag/Maand/Jaar weergeven
De Live voorbeeld die momenteel werkt maar nog niet met slutingsdagen enkel met feestdagen
Klik hier voor live voorbeeld
Gewijzigd op 13/08/2014 22:08:29 door Jaimy A
Array maken met daarin de datums vanaf vandaag t/m 7 dagen later:
Code (php)
Vervolgens in de database een tabel aanmaken met hierin de feestdagen met, naam, id, datum, openingstijd en omschrijving.
En dan bij het maken van het overzicht met openingstijden bij elke index van de array kijken of de inhoud overeenkomt met een datum uit de database.
Zo ja, is er een feestdag en toon je de omschrijving met openingstijd.
(Gebruik alleen de maand en de dag, anders moet je alles in de database weer aanpassen als het 2015 is.)
Gewijzigd op 14/08/2014 09:52:10 door Johhny Westra
Enneh:
Quote:
Die htmlspecialchars is natuurlijk overbodig in een datum. Welke vreemde karakters kunnen daar inzitten denk je?
feestdagen worden elk jaar automatisch berekend dus dit moet ik niet aanpassen.
(feestdagen in belgie)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$Jaar = date('Y');
$D1 = date('Y/m/d'); // huidige dag
$D7 = date('Y/m/d', strtotime("+7 day")); // huidige dag + 7 dagen
$EA = easter_date($Jaar); // Paas datum
$ED = date('j', $EA); // Paas dag
$EM = date('n', $EA); // Paas maand
$EY = date('Y', $EA); // Paas jaar
$HO1 = date('Y/m/d', mktime (0,0,0,1,1,$Jaar)); // Nieuwjaar
$HO2 = date('Y/m/d', mktime (0, 0, 0, $EM, $ED + 1, $EY)); // Paasmaandag
$HO3 = date('Y/m/d', mktime (0,0,0,5,1,$Jaar)); // Dag van de arbeid
$HO4 = date('Y/m/d', mktime (0, 0, 0, $EM, $ED + 39, $EY)); // O.L.H. Hemelvaart
$HO5 = date('Y/m/d', mktime (0, 0, 0, $EM, $ED + 50, $EY)); // Pinkster maandag
$HO6 = date('Y/m/d', mktime (0,0,0,7,21,$Jaar)); // Nationale feestdag
$HO7 = date('Y/m/d', mktime (0,0,0,8,15,$Jaar)); // O.L.V. Hemelvaart
$HO8 = date('Y/m/d', mktime (0,0,0,11,1,$Jaar)); // Allerheiligen
$HO9 = date('Y/m/d', mktime (0,0,0,11,11,$Jaar)); // Wapenstilstand
$HO10 = date('Y/m/d', mktime (0,0,0,12,25,$Jaar)); // Kerstmis
$HO15 = date('Y/m/d', mktime (0,0,0,6,29,$Jaar)); // TEST
$D1 = date('Y/m/d'); // huidige dag
$D7 = date('Y/m/d', strtotime("+7 day")); // huidige dag + 7 dagen
$EA = easter_date($Jaar); // Paas datum
$ED = date('j', $EA); // Paas dag
$EM = date('n', $EA); // Paas maand
$EY = date('Y', $EA); // Paas jaar
$HO1 = date('Y/m/d', mktime (0,0,0,1,1,$Jaar)); // Nieuwjaar
$HO2 = date('Y/m/d', mktime (0, 0, 0, $EM, $ED + 1, $EY)); // Paasmaandag
$HO3 = date('Y/m/d', mktime (0,0,0,5,1,$Jaar)); // Dag van de arbeid
$HO4 = date('Y/m/d', mktime (0, 0, 0, $EM, $ED + 39, $EY)); // O.L.H. Hemelvaart
$HO5 = date('Y/m/d', mktime (0, 0, 0, $EM, $ED + 50, $EY)); // Pinkster maandag
$HO6 = date('Y/m/d', mktime (0,0,0,7,21,$Jaar)); // Nationale feestdag
$HO7 = date('Y/m/d', mktime (0,0,0,8,15,$Jaar)); // O.L.V. Hemelvaart
$HO8 = date('Y/m/d', mktime (0,0,0,11,1,$Jaar)); // Allerheiligen
$HO9 = date('Y/m/d', mktime (0,0,0,11,11,$Jaar)); // Wapenstilstand
$HO10 = date('Y/m/d', mktime (0,0,0,12,25,$Jaar)); // Kerstmis
$HO15 = date('Y/m/d', mktime (0,0,0,6,29,$Jaar)); // TEST
Gewijzigd op 14/08/2014 10:16:34 door Jaimy A
Daar krijg je toch precies dezelfde oplossing voor als hierboven aangedragen? Wat is nu het verschil tussen feesdag en sluitingsdag? Het concept het precies hetzelfde.
Ik zou mijn sluitingsdagen uit mysql willen trekken en dan in mijn functie die ik gebruik voor mijn feestdagen (hieronder) maar enkel met de dagen die zich tussen vandaag en 7dagen later bevinden.
Je krijgt dan drie soorten datums:
a. Geopend: staat in de tabel.
b. Feestdag: wordt berekend.
c. Uitzonderlijke sluiting: staat niet in de tabel (a) maar is ook geen feestdag (b).
Jaimy A op 14/08/2014 10:25:50:
Feestdagen worden berekend in php en niet in mysql
Ik bedoelde natuurlijk de oplossing die door een ander dan jijzelf hierboven werd aangedragen....
Openingsuren bevat sluitingsdagen heb het gewoon dezelfde naam gegeven als mijn php file
We zijn altijd open tenzij het zondag is , of het is een feestdag of de sluitingsdag staat in de tabel "openingsuren"
Dan keer je de logica dus gewoon om. Laad de sluitingsdatums vanuit de database in een array. Komt een datum niet voor in de array of is de array leeg (dat kan ook), dan ben je geopend, tenzij het een zon- of feestdag is.
Jaimy, ik heb een opzetje voor je gemaakt hoe ik het zou doen.
Vanuit gaande dat je een werkende database connectie hebt en de feestdagen gaat opslaan in database!! (raad ik je echt aan)
Geschreven zonder iets te testen so please bare with me.
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
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
<?php
/**
* Created by PhpStorm.
* User: jklamer
* Date: 14-8-14
* Time: 12:19
*/
$week = Array(
date('y/m/d'),
date('y/m/d', time()+86400),
date('y/m/d', (time()+86400)*2),
date('y/m/d', (time()+86400)*3),
date('y/m/d', (time()+86400)*4),
date('y/m/d', (time()+86400)*5),
date('y/m/d', (time()+86400)*6)
);
function createTable($week){
$output = ""; //Voorbereiding voor output
foreach($week as $date){
$query = "SELECT * FROM Openingsuren WHERE Datum = " . $date; //Haalt alles op uit de database waar $date gelijk is aan de kolom 'datum'
$result = mysql_query($query) or die("Fout in de query"); //Voert de array uit, als er fout is in de query print hij "Fout in de query"
$row = mysql_fetch_array($result); //Zorgt dat de resultaten van de query in een array genaamd $row komen te staan
$output .= "<table>"; //Zorgen voor table opmaak
if(mysql_num_rows($result) > 0){ //Er is een feestdag in de database met dezelfde datum als variabele day
$output .= "<tr><td>" . date('l', $date) . "</td><td>" . $row['openingstijden'] . "</td></tr>"; //Zet datum om in dag naam, haalt uit de database de openingstijd op bij de desbetreffende feestdag en zet het in table row
} else { //Geen feestdag op die datum dus gewone openingstijden weergeven
if(date('l', $date) == "Sunday"){
$output .= "<tr><td>Sunday</td><td>Gesloten</td></tr>"; //Checked of het een zondag is, zo ja dan is die gesloten
} else {
$output .= "<tr><td>" . date('l', $date) . "</td><td>09:00 - 17:00</td>"; //Er vanuit gaande dat alle andere dagen in de week hij van 9 tot 5 open is.
}
}
$output .= "</table>";
}
return $output;
}
echo createTable($week);
/**
* Created by PhpStorm.
* User: jklamer
* Date: 14-8-14
* Time: 12:19
*/
$week = Array(
date('y/m/d'),
date('y/m/d', time()+86400),
date('y/m/d', (time()+86400)*2),
date('y/m/d', (time()+86400)*3),
date('y/m/d', (time()+86400)*4),
date('y/m/d', (time()+86400)*5),
date('y/m/d', (time()+86400)*6)
);
function createTable($week){
$output = ""; //Voorbereiding voor output
foreach($week as $date){
$query = "SELECT * FROM Openingsuren WHERE Datum = " . $date; //Haalt alles op uit de database waar $date gelijk is aan de kolom 'datum'
$result = mysql_query($query) or die("Fout in de query"); //Voert de array uit, als er fout is in de query print hij "Fout in de query"
$row = mysql_fetch_array($result); //Zorgt dat de resultaten van de query in een array genaamd $row komen te staan
$output .= "<table>"; //Zorgen voor table opmaak
if(mysql_num_rows($result) > 0){ //Er is een feestdag in de database met dezelfde datum als variabele day
$output .= "<tr><td>" . date('l', $date) . "</td><td>" . $row['openingstijden'] . "</td></tr>"; //Zet datum om in dag naam, haalt uit de database de openingstijd op bij de desbetreffende feestdag en zet het in table row
} else { //Geen feestdag op die datum dus gewone openingstijden weergeven
if(date('l', $date) == "Sunday"){
$output .= "<tr><td>Sunday</td><td>Gesloten</td></tr>"; //Checked of het een zondag is, zo ja dan is die gesloten
} else {
$output .= "<tr><td>" . date('l', $date) . "</td><td>09:00 - 17:00</td>"; //Er vanuit gaande dat alle andere dagen in de week hij van 9 tot 5 open is.
}
}
$output .= "</table>";
}
return $output;
}
echo createTable($week);
Gewijzigd op 14/08/2014 12:30:55 door Johhny Westra
Bedankt zal er straks is naar kijken
Alleen zou ik de feestdagen opslaan in mysql het liefst niet doen aangezien ik er nu niets aan moet doen en dit elk jaar zijn eige uptodate houdt met mysql moet ik alle jaren er gaan inzetten
Ik zou het toch maar eens testen, de haakjes staan verkeerd (daar waar je dagen bij de datum wilt op tellen). Deze zijn overigens overbodig want Meneer Van Dalen Wacht (nog steeds) Op Antwoord
Gewijzigd op 14/08/2014 19:16:19 door Ger van Steenderen