Datum planner
Weet iemand of het mogelijk zou zijn een reeks datums automatisch te laten genereren. (zelfde dag, een aantal weken na elkaar)
Met onderstaande link zie je een pagina waar ik mee bezig ben en waar ik graag per week de juiste datum zou willen invoegen.
linkje
mvg
Mon
ps deze pagina stelt niet veel voor maar het is een onderdeel van een veel groter geheel.
url gewijzigd[/modedit]
Gewijzigd op 13/02/2013 13:55:10 door Bas IJzelendoorn
Dat kan zeker. Het kan zowel met PHP als met Mysql. Met de komst van PHP 5.2 en 5.3 zijn er een reeks datum functies bijgekomen dus het kan handig zijn om even na te kijken met welke versie je werkt
Je kan dit apart testen (in een leeg document).
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
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
<input type="text" id="date" name="date" value="20 02 2013"> Datum<br>
<style>
#date {
width: 500px;
}
</style>
Gedurende x aantal weken:
<input type="text" onchange="aantal_weken(this, event);" value="1">
<script>
function aantal_weken(elm, e) {
var datum_element = document.getElementById('date');
var gekozen_datum = datum_element.value.split(';')[0]; // kiest de waarde, tot het een ";" tegen komt
var items = gekozen_datum.split(' ');
if (items[2]) {
var date = new Date();
date.setFullYear(Number(items[2]));
date.setMonth(Number(items[1]) - 1);
date.setDate(Number(items[0]));
var output = '';
for (var i=0; Number(elm.value) - 1 >= i ; i++) { // elm.value zou dus een geheel getal moeten bevatten: het aantal weken
if (i>0) {
output += ';'; // zet een puntkomma tussen de waarden
}
output += date.getDate() +' '+ (date.getMonth() + 1) +' '+ date.getFullYear(); // voegt telkens een datum toe
date = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 7); // week toevoegen
}
datum_element.value= output;
}
}
</script>
<style>
#date {
width: 500px;
}
</style>
Gedurende x aantal weken:
<input type="text" onchange="aantal_weken(this, event);" value="1">
<script>
function aantal_weken(elm, e) {
var datum_element = document.getElementById('date');
var gekozen_datum = datum_element.value.split(';')[0]; // kiest de waarde, tot het een ";" tegen komt
var items = gekozen_datum.split(' ');
if (items[2]) {
var date = new Date();
date.setFullYear(Number(items[2]));
date.setMonth(Number(items[1]) - 1);
date.setDate(Number(items[0]));
var output = '';
for (var i=0; Number(elm.value) - 1 >= i ; i++) { // elm.value zou dus een geheel getal moeten bevatten: het aantal weken
if (i>0) {
output += ';'; // zet een puntkomma tussen de waarden
}
output += date.getDate() +' '+ (date.getMonth() + 1) +' '+ date.getFullYear(); // voegt telkens een datum toe
date = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 7); // week toevoegen
}
datum_element.value= output;
}
}
</script>
Om dit in jouw script toe te voegen:
- Die value="20 02 2013" mag je weglaten; die staat er maar om het apart te kunnen testen.
- dat tweede <input> en <script> element toevoegen in je script. Het maakt niet uit waar;
- Alles van tussentekst, style, ... kan je aanpassen naar believen.
---
Als je iets anders van werking zou willen (bv. met een <select>), vraag maar.
Op php vlak kan je de datums uit mekaar halen met
$dates = explode(';', $_POST['date']);
Maar ik weet niet precies wat je op server-niveau van plan bent met die datums.
Gewijzigd op 13/02/2013 14:53:00 door Kris Peeters
Heb die code zonet even getest. Al wat ik nodig heb zit er in.
Al denk ik hier wel even mee zoet te zijn om dat in te passen. (Laat je computer maar aan staan ..:-}, jij ook Frank)
Waarschijnlijk ben ik in het weekend zover dat ik wat op het net kan zetten zodat jullie een beter zicht hebben op het geheel en me kunnen zeggen waar er nog addertjes zitten.
In mijn ogen zijn jullie een soort phphalfgoden.
Grts
Raymond
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
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
<html>
<head>
<script type='text/javascript'>
function getDates(day, month, year, weeks) {
var date = new Date(year, month-1, day, 0, 0, 0, 0); //Een begin datum aanmaken
var arr_dates = new Array(); //Een array voor de datums maken
document.getElementById('datums').innerHTML = date + "<br>"; //Dit is alleen om te laten zien wat er uit komt
for(i=1; i<=weeks; i++) //Voor elke week
{
arr_dates[i] = new Date(date.getTime() + 7 * 24 * 60 * 60 * 1000); //De volgende week uitrekenen
date = arr_dates[i]; //De oude datum op deze week zetten
document.getElementById('datums').innerHTML += date + "<br>"; //En weer om te laten zien dat ie werkt.
}
}
</script>
</head>
<body>
D/M/J<br>
<input type='number' id='day' value='1' /><input type='number' id='month' value='1' /><input type='number' id='year' value='2013' /><br>
Aantal weken:<br>
<input type='number' id='weeks' value='5' /><br>
<button onClick='getDates(day.value, month.value, year.value, weeks.value);'>Datums</button><br><br>
<div id='datums'>
</div>
</body>
</html>
<head>
<script type='text/javascript'>
function getDates(day, month, year, weeks) {
var date = new Date(year, month-1, day, 0, 0, 0, 0); //Een begin datum aanmaken
var arr_dates = new Array(); //Een array voor de datums maken
document.getElementById('datums').innerHTML = date + "<br>"; //Dit is alleen om te laten zien wat er uit komt
for(i=1; i<=weeks; i++) //Voor elke week
{
arr_dates[i] = new Date(date.getTime() + 7 * 24 * 60 * 60 * 1000); //De volgende week uitrekenen
date = arr_dates[i]; //De oude datum op deze week zetten
document.getElementById('datums').innerHTML += date + "<br>"; //En weer om te laten zien dat ie werkt.
}
}
</script>
</head>
<body>
D/M/J<br>
<input type='number' id='day' value='1' /><input type='number' id='month' value='1' /><input type='number' id='year' value='2013' /><br>
Aantal weken:<br>
<input type='number' id='weeks' value='5' /><br>
<button onClick='getDates(day.value, month.value, year.value, weeks.value);'>Datums</button><br><br>
<div id='datums'>
</div>
</body>
</html>
Gewijzigd op 14/02/2013 09:59:14 door Tim van Norde
Bedankt voor het inzenden.
Toch een vraag :
-Bij sommige ingave's staat er een week teveel in het lijstje.
Is dat een foutje in het script ? ( de loop instructie lijkt anders wel in orde)
grts
Raymond
Code (php)
1
arr_dates[i] = new Date(date.getTime() + (7 * 24 * 60 * 60 * 1000)); //De volgende week uitrekenen
bij mij doet ie t nu wel. Dat is ook altijd mijn probleem met javascript: berekeningen..
Hetgeen logisch is, want als je vanaf vandaag de datum 1 week vooruit zet heb je 2 donderdagen.
Tims script een beetje aangepast:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<script type='text/javascript'>
function getDates(day, month, year, weeks) {
var startdate = new Date(year, month-1, day, 0, 0, 0, 0); //Een begin datum aanmaken
for(i=0; i<weeks; i++) //Voor elke week
{
date = new Date(startdate.getTime() + (i * 7 * 24 * 60 * 60 * 1000)); //datum aantal weken vooruitzetten
document.getElementById('datums').innerHTML += String(date.getDate()) + '-' +
String((date.getMonth() + 1)) + '-' +
String(date.getYear()) + "<br>"; //En weer om te laten zien dat ie werkt.
}
}
</script>
function getDates(day, month, year, weeks) {
var startdate = new Date(year, month-1, day, 0, 0, 0, 0); //Een begin datum aanmaken
for(i=0; i<weeks; i++) //Voor elke week
{
date = new Date(startdate.getTime() + (i * 7 * 24 * 60 * 60 * 1000)); //datum aantal weken vooruitzetten
document.getElementById('datums').innerHTML += String(date.getDate()) + '-' +
String((date.getMonth() + 1)) + '-' +
String(date.getYear()) + "<br>"; //En weer om te laten zien dat ie werkt.
}
}
</script>
Gewijzigd op 14/02/2013 20:28:13 door Ger van Steenderen
Thanks a lot.
Ik ben een beetje aan het experimenteren gegaan en tot nu toe spreekt de code die ik van Kris ontving me het meest aan, omdat ik daar een datapicker (softpedia) kan aan toevoegen. Misschien kan dat met het java script ook maar ik zou niet weten hoe ik dat moet klaarspelen.
Ik blijf in elk geval proberen.
Hallo Bas , bedankt voor het aanpassen van de link. kan je me zeggen hoet ik dat in het vervolg zelf moet doen ?
Grts
Raymond
Het is de bedoeling om per week een record weg te schrijven.
Ik veronderstel dat EXPLODE zoals je voorstelt dan wel nodig is.
Tot nu toe ben ik er nog niet in geslaagd die "explode" in te lassen. Nog een beetje hulp aub.
http://www.abc-wilrijk.be/agendatest/plann-maker/testen/wekenkris.php
grts
Raymond
Staat er misschien een foutje in de bijkomende code die je me laatst gegeven hebt ?
Wat ik ook doe , ik krijg steeds een error , behalve wanneer ik rij 2 weglaat.
Op de server heb ik een table gemaakt met 2 velden "cursus_id" en "datum"
Cursus_id = int , Auto increment
datum = date
In rij 3 staat $_POST['data'] moet dan soms niet ...'date' zijn ?
In de foreach (rij 4) lijn loop, heb ik een print of echo willen plaatsen maar er gebeurd niets
Zou je dat eens willen nakijken aub
grts
Mon
Maar je hebt gelijk, het moet $_POST['date'] zijn.
Sorry voor de vergissing.
Jouw code heb ik aan die van Kris willen toevoegen maar dat lukt van geen kanten.
Alleen als ik $sql insert .enz....weglaat krijg ik geen error.
Het wegschrijven naar de server zal mij wel lukken denk ik, maar ik zou ook graag elke datum apart op het scherm doen verschijnen en dat wil maar niet lukken. Als het niet teveel gevraags is , zou je het dan zelf ook een willen proberen aub ?
grts
Raymond
Gewijzigd op 17/02/2013 18:12:34 door Raymond Colin