Ik ben bezig om een agenda / kalender te maken die men kan indelen in dagen, weken en maanden.
Het is me gelukt om een weekkalender te maken. Ik kan met behulp van een functie die ik hier heb gevonden de startdatum van een willekeurige week achterhalen en de einddatum. De functie - even ter herhaling - vind je hieronder:
Nu wil ik net zoals in dit plaatje de maanden weer indelen in weken. December 2005 bijvoorbeeld, loopt vanaf donderdag 1 december t/m zaterdag 31 december. Dat is respectievelijk week 48 t/m week 52.
De kalender voor de maand december moet dus beginnen op 28 november 2005 (startdatum week 48) t/m 1 januari 2006 (einddatum week 52). De kalender voor januari 2006 loopt vanaf 26 december 2005 t/m 6 februari 2006.
Nou rijst er een probleem op in de januari kalender. Om de startdatum van de week te bepalen moet ik twee argumenten bij de functie geven, het weeknummer en het jaar. Januari 2006 begint in week 52 van het jaar 2005, maar vanaf 1 januari zitten we in 2006. Uiteraard wordt het jaar 2006 meegegeven aan de functie. Ik kan geen if-statement maken om dat recht te trekken, want ik weet niet hoe het in de volgende jaren gaat lopen. Op onderstaande URL kun je kijken hoe het werkt. Je ziet de startweek en de eindweek staan en een rij data die in die maandkalender zouden moeten komen. Je zult zien dat de maand januari niets weergeeft, aangezien die datum loopt van 20061225 t/m 20060205, wat dus fout is.
Hieronder de code die ik gebruik (om naar de vorige en volgende maand te gaan, gebruik ik index.php?month=$month_prev_month en index.php?month=$month_next_month):
Hoe kan ik dit euvel in godsnaam oplossen. Ik ben nu al een week bezig om de oplossing te vinden en ik kom er niet meer uit. Het is geen optie om louter de dagen van de betreffende maand te nemen, ik wil kosten wat het kost de begin- en einddata van de weken hebben.
Het is me gelukt om een weekkalender te maken. Ik kan met behulp van een functie die ik hier heb gevonden de startdatum van een willekeurige week achterhalen en de einddatum. De functie - even ter herhaling - vind je hieronder:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function weektotimestamp($year, $week, $day) { $firstdate = mktime (0,0,0,1,4, $year); // jan 04 always in week 1 $firstday = date("w", $firstdate); // fetch day of week of jan 04 if ($firstday == 0) { $firstday = 7; } $offset = ($week-1) * 7 - $firstday + $day; //calc number of days difference from jan 04 return strtotime('+' .$offset .' days', $firstdate); } |
Nu wil ik net zoals in dit plaatje de maanden weer indelen in weken. December 2005 bijvoorbeeld, loopt vanaf donderdag 1 december t/m zaterdag 31 december. Dat is respectievelijk week 48 t/m week 52.
De kalender voor de maand december moet dus beginnen op 28 november 2005 (startdatum week 48) t/m 1 januari 2006 (einddatum week 52). De kalender voor januari 2006 loopt vanaf 26 december 2005 t/m 6 februari 2006.
Nou rijst er een probleem op in de januari kalender. Om de startdatum van de week te bepalen moet ik twee argumenten bij de functie geven, het weeknummer en het jaar. Januari 2006 begint in week 52 van het jaar 2005, maar vanaf 1 januari zitten we in 2006. Uiteraard wordt het jaar 2006 meegegeven aan de functie. Ik kan geen if-statement maken om dat recht te trekken, want ik weet niet hoe het in de volgende jaren gaat lopen. Op onderstaande URL kun je kijken hoe het werkt. Je ziet de startweek en de eindweek staan en een rij data die in die maandkalender zouden moeten komen. Je zult zien dat de maand januari niets weergeeft, aangezien die datum loopt van 20061225 t/m 20060205, wat dus fout is.
Hieronder de code die ik gebruik (om naar de vorige en volgende maand te gaan, gebruik ik index.php?month=$month_prev_month en index.php?month=$month_next_month):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <?php // Code om volgende en vorige maanden uit te rekenen $month_first_day = date("Ymd", mktime(0, 0, 0, $this_month, 1, $this_year)); $month_first_year = date("Y", mktime(0, 0, 0, $this_month, 1, $this_year)); $month_first_week = date("W", mktime(0, 0, 0, $this_month, 1, $this_year)); $month_first_week_day = date("Ymd", weektotimestamp($this_year, $month_first_week, 1)); $month_first_day_compare = $month_first_week_day; $month_last_day = date("Ymd", mktime(0, 0, 0, $this_month+1, 0, $this_year)); $month_last_year = date("Y", mktime(0, 0, 0, $this_month+1, 0, $this_year)); $month_last_week = date("W", mktime(0, 0, 0, $this_month+1, 0, $this_year)); $month_last_week_day = date("Ymd", weektotimestamp($month_last_year, $month_last_week, 7)); $month_prev_month = date("Ymd", mktime(0, 0, 0, $this_month-1, 1, $this_year)); $month_next_month = date("Ymd", mktime(0, 0, 0, $this_month+1, 1, $this_year)); ?> |
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <?php // while loop om data uit te spugen + begindatum en einddatum echo "Week ".$month_first_week." ".$month_first_week_day."<br>"; echo "Week ".$month_last_week." ".$month_last_week_day."<br><br><br><br>"; $x = 1; while ($month_first_day_compare <= $month_last_week_day) { echo $x.". ".$month_first_day_compare."<br>"; $month_first_day_compare = date("Ymd", mktime(0, 0, 0, substr($month_first_day_compare, 4, 2), substr($month_first_day_compare, 6, 2)+1, substr($month_first_day_compare, 0, 4))); $x++; } ?> |
Hoe kan ik dit euvel in godsnaam oplossen. Ik ben nu al een week bezig om de oplossing te vinden en ik kom er niet meer uit. Het is geen optie om louter de dagen van de betreffende maand te nemen, ik wil kosten wat het kost de begin- en einddata van de weken hebben.
[ Voor 12% gewijzigd door Rexomnium op 20-12-2005 17:39 ]
We zijn allemaal vaandeldrager in een optocht van gekwetsten.