Get dates between twee datums en zet dan de resultaten in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Christiaan de kleine

christiaan de kleine

01/07/2014 17:16:21
Quote Anchor link
Hallo allemaal,

Met onderstaand script krijg ik alle tussenliggende datums tussen start en eind datum.
Alleen wat ik wil is dat hij ze in een database invoert.

Table name = dates
fields: id, date1, date2, date3, date4, date5, date6, date7, date8, date9, date10, date11, date12

Enkele keren gebruik ik ze alle 10, andere keren maar 3 of 4 datums.

Iemand die mij misschien het laatste stukje kan helpen???

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
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
<?php
include ("../connections/config.php");

if($_SERVER['REQUEST_METHOD'] == 'POST') {
    
    // Specify the start date. This date can be any English textual format  
$date_from = $_POST['Begin'];  
$date_from = strtotime($date_from); // Convert date to a UNIX timestamp  
  
// Specify the end date. This date can be any English textual format  

$date_to = $_POST['Eind'];  
$date_to = strtotime($date_to); // Convert date to a UNIX timestamp  
  
// Loop from the start date to end date and output all dates inbetween  

for ($i=$date_from; $i<=$date_to; $i+=86400) {  
    echo date("d-m-Y", $i).'<br />';  
    
}  

}


?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<form method="POST" action="">
Start datum: <input type="Date" name="Begin" /><br />
Eind datum: <input type="Date" name="Eind" /><br />
<input type="submit" value="Submit" name="Submit" />

</form>

</body>
</html>
 
PHP hulp

PHP hulp

02/03/2024 07:31:40
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/07/2014 19:18:54
Quote Anchor link
Om maar met de deur in huis te vallen, dat klinkt niet goed. Kun je mij misschien helpen en eens vertellen wat je wilt gaan maken?
 
Christiaan de kleine

christiaan de kleine

01/07/2014 20:16:38
Quote Anchor link
Het betreft een evenementen rooster systeem.
Niet echt veel eisend maar op deze manier is het makkelijker.

Maar vanwaar de opmerking dat het niet best is
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/07/2014 21:21:52
Quote Anchor link
Omdat het aantal kolommen nooit variabel moet zijn maar het alleen het aantal records.

Kan ik het zien als een soort agenda?

dan zou je iets kunnen krijgen als

tabel events:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
id
name
description
start_date
end_date


tabel appointments:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
id
event_id
description
date_time


De eerste tabel sla je alle evenementen in op
De tweede tabel sla je alle planningen/afspraken in op
 
Christiaan de kleine

christiaan de kleine

02/07/2014 17:32:20
Quote Anchor link
Je moet het zien als

Evenement À heeft 10 dagen
Evenement B heeft 5 dagen
Evenement C heeft 1 dag

Ik had in mijn hoofd om de datums in een array te plaatsen, en waar array(X) leeg is dat daar een X wordt ingevoerd in de database.
Als je een andere / makkelijkere manier hebt dan hoor ik dat graag.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

02/07/2014 20:39:49
Quote Anchor link
Een database is bedoeld voor het gestructureerd opslaan van gegevens met geen overbodige en dubbele gegevens.
om enkel opéénvolgende dagen op te slaan in de database is dus wel overbodig. PHP (kan ook met SQL) heeft kant en klare functies om alle dagen te berekenen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$start
= '01-07-2014 09:00:00';
$dagen = 10;

$dt = new DateTime($start);

for($i = 0 ; $i < $dagen ; $i++)
{

    echo $dt->format('d-m') . "<br>\n";
    $dt->add(new DateInterval('P1D'));
}

?>
 
Christiaan de kleine

christiaan de kleine

02/07/2014 20:55:18
Quote Anchor link
nu snap je het juist niet meer.

Ik heb een evenementen systeem waarin ik in een database alle datums tussen start en eind datum MOET opslaan. Zodat ik daarna bepaalde diensten kan aanmaken zodat ik daar mensen op kan inroosteren.
Ik moet dus en start, eind en alle tussenliggende datums opslaan.
Dus als start datum 10-01-2014 en eind datum is 15-01-2014 dan moet ik in de database opslaan:
10-01-2014
11-01-2014
12-01-2014
13-01-2014
14-01-2014
15-01-2014

zoals ik in mijn eerste post al duidelijk had (geprobeerd te maken)

Daarom was mijn vraag ook hoe ik deze datums snel kan laten invoeren in een database...
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

02/07/2014 21:11:48
Quote Anchor link
Logisch denken:
Quote:
Ik heb een evenementen systeem waarin ik in een database alle datums tussen start en eind datum MOET opslaan.

verklaar MOET
 
Frank Nietbelangrijk

Frank Nietbelangrijk

02/07/2014 21:14:23
Quote Anchor link
Noem eens enkele voorbeelden van 'bepaalde diensten'?

Toevoeging op 02/07/2014 21:25:17:

volgens mij moet je dit hebben:
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
15
16
17
18
19
20
21
22
23
users
================================
id | naam    | email
--------------------------------
1  | Jan     | [email protected]
2  | Klaas   | [email protected]
================================

evenementen
================================
id | naam    | start     | dagen
--------------------------------
1  | Pinkpop | 14-6-2014 | 3
2  | Oerol   | 13-6-2014 | 10
================================

planning
=======================================================
id | user_id | event_id  | datum     | taak
-------------------------------------------------------
1  | 1       | 2         | 15-6-2014 | Barmedewerker
2  | 2       | 2         | 16-6-2014 | Kaartjes knippen
=======================================================
 
Christiaan de kleine

christiaan de kleine

05/07/2014 13:06:31
Quote Anchor link
Dat moet ik gedeeltelijk hebben, alleen dus bij evenementen moet ik elke dag apart hebben staan. en dus niet start en dagen maar de dagen apart zelf...
Verder is het planningen van diensten.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/07/2014 13:19:07
Quote Anchor link
Christiaan de kleine op 05/07/2014 13:06:31:
... alleen dus bij evenementen moet ik elke dag apart hebben staan ...


Je schrijft helaas wederom niet waarom dat moet. Het ontbreekt ons aan informatie. Wat voor website wil je maken? Gaat deze altijd over één evenement of zijn er meerdere evenementen? Hoe vaak is dit evenement(en)? Wat voor evenementen zijn het?

Waar het om gaat is dat je geen kolommen moet gaan toevoegen voor elke 'dag' maar dat je records moet toevoegen. Probeer nou aan de hand van mijn voorbeeld je eigen tabel-indelingen te maken en deel dat eens met ons.

Overigens heb je je diensten per dag maar dit is de tabel planning. De tabel planning is namelijk gelinkt aan evenementen zodat je weet welke planning bij welk evenement hoort (beide planning records in mijn voorbeeld zijn gelinkt aan evenement 2. en Evenement 2 is Oerol)
Gewijzigd op 05/07/2014 13:24:12 door Frank Nietbelangrijk
 
Wladimir S

Wladimir S

18/07/2014 13:14:51
Quote Anchor link
Omdat je zo te zien 1 record met 12 datumvelden gaat schrijven, zou ik een string samen stellen dat je met de datums vult.
Die string kan je dan naar de database schrijven.

je krijgt dan iets als:

// Loop from the start date to end date and output all dates inbetween
$datumstring="insert into TABELNAAM values('', ";
$vnr=0;
for ($i=$date_from; $i<=$date_to; $i+=86400) {
$vnr++;
if($vnr<=12)
{ $datum=date("d-m-Y", $i);
$datumstring.="\"$datum\" ";
if($vnr<12)
{ $datumstring.=", "; }
}
echo date("d-m-Y", $i).'<br />';
}
for($i=$vnr+1;$i<=12;$i++){
$datumstring.="\"\"";
if($vnr<12)
{ $datumstring.=", "; }
}
$datumstring.=")";
echo "<br>Straks schrijven we naar de database:<br>$datumstring<br>";
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/07/2014 13:27:40
Quote Anchor link
>> Omdat je zo te zien 1 record met 12 datumvelden gaat schrijven, zou ik een string samen stellen dat je met de datums vult.

Daar is een database niet voor bedoeld, dan kan je het net zo goed naar een text bestand schrijven.
 
Wladimir S

Wladimir S

18/07/2014 13:45:47
Quote Anchor link
Ach ja, een ieder mag bepalen wat hij in zijn eigen database stopt.

Ik zeg ook niet dat ik het met Christiaan's werkwijze eens ben, ik denk alleen maar mee in zijn gedachtengang.

En als hij 12 datumvelden in 1 record wil zetten, dan is mijn bijdrage een mogelijke optie.
 
Willem vp

Willem vp

19/07/2014 17:39:01
Quote Anchor link
Er is een situatie waarbij ik me kan indenken dat je afzonderlijke datums in de database wilt opslaan: als een evenement niet altijd op aaneengesloten dagen wordt gehouden. Wanneer het altijd een aaneengesloten periode is, is het in principe voldoende om alleen de start- en einddatum op te slaan. Voor ééndaagse evenementen kun je dan nog kiezen of je als einddatum de startdatum kiest of NULL.

De datums opslaan in een stringveld moet je alleen doen als je een lage performance, weinig functionaliteit, en veel frustratie bij toekomstige uitbreidingen wilt hebben.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/07/2014 19:40:48
Quote Anchor link
Willem vp op 19/07/2014 17:39:01:
De datums opslaan in een stringveld moet je alleen doen als je een lage performance, weinig functionaliteit, en veel frustratie bij toekomstige uitbreidingen wilt hebben.


Die is leuk maar wel waar
Gewijzigd op 19/07/2014 19:41:30 door Frank Nietbelangrijk
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/07/2014 20:09:29
Quote Anchor link
Leuk cynisme.
En inderdaad waar. E. Codd zou zich in zijn graf omdraaien!
 



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.