Week array met lessen erin
Verder haal ik lessen op uit een api die ik vervolgens op datum controleer en dus bij de juiste weekdag stop.
De api kan voor meerdere dagen lessen terug geven, Dus dat kan ook voor de aankomende 10 dagen zijn. Maar ik hoef alleen de lessen van deze week
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
static public function getWeekLessons(){
$current_week_number = date('W');
$current_year = date('Y');
$selected_week_number = (int) $_POST['currentWeekNumber'];
if (isset($_POST['prevOrNext'])) {
if ($_POST['prevOrNext'] == "prev" && !($selected_week_number <= $current_week_number)) {
$selected_week_number--; // Move to the previous week
} elseif ($_POST['prevOrNext'] == "next" && $selected_week_number < 52) {
$selected_week_number++; // Move to the next week, assuming 52 weeks in a year
}
}
$first_day_of_week = new DateTime();
$first_day_of_week->setISODate($current_year, $selected_week_number);
$weekdays = array();
for ($i = 0; $i < 7; $i++) {
$date = $first_day_of_week->format('d-m-Y');
$weekdays[$date] = [
'date' => $date,
'lessons' => []
];
$first_day_of_week->modify('+1 day');
}
$firstDayOfWeekFormatted = reset($weekdays)['date'];
$lastDayOfWeekFormatted = end($weekdays)['date'];
$firstDayOfWeekFormatted = (new DateTime($firstDayOfWeekFormatted))->format('d-m');
$lastDayOfWeekFormatted = (new DateTime($lastDayOfWeekFormatted))->format('d-m');
$client = new SportivityClient(13361);
$lessons = $client->getLocationLessons([])['LessonObjects'];
foreach ($lessons as $lesson) {
$startTime = DateTime::createFromFormat('d/m/Y H:i:s', $lesson['StartTime']);
$lessonDate = $startTime->format('d-m-Y');
if (!isset($weekdays[$lessonDate])) continue;
$lesson['LessonDate'] = $lessonDate;
$lesson['StartTimeConverted'] = $startTime->format('H:i');
$endTime = DateTime::createFromFormat('d/m/Y H:i:s', $lesson['EndTime']);
$lesson['EndTimeConverted'] = $endTime->format('H:i');
$interval = $endTime->diff($startTime);
$minutes = $interval->format('%i') + $interval->format('%h') * 60;
$lesson['Duration'] = $minutes;
$weekdays[$lessonDate]['lessons'][] = $lesson;
}
wp_send_json([
'selectedWeekNumber' => $selected_week_number,
'weekdays' => array_values($weekdays),
'firstDayOfWeek' => $firstDayOfWeekFormatted,
'lastDayOfWeek' => $lastDayOfWeekFormatted,
]);
}
$current_week_number = date('W');
$current_year = date('Y');
$selected_week_number = (int) $_POST['currentWeekNumber'];
if (isset($_POST['prevOrNext'])) {
if ($_POST['prevOrNext'] == "prev" && !($selected_week_number <= $current_week_number)) {
$selected_week_number--; // Move to the previous week
} elseif ($_POST['prevOrNext'] == "next" && $selected_week_number < 52) {
$selected_week_number++; // Move to the next week, assuming 52 weeks in a year
}
}
$first_day_of_week = new DateTime();
$first_day_of_week->setISODate($current_year, $selected_week_number);
$weekdays = array();
for ($i = 0; $i < 7; $i++) {
$date = $first_day_of_week->format('d-m-Y');
$weekdays[$date] = [
'date' => $date,
'lessons' => []
];
$first_day_of_week->modify('+1 day');
}
$firstDayOfWeekFormatted = reset($weekdays)['date'];
$lastDayOfWeekFormatted = end($weekdays)['date'];
$firstDayOfWeekFormatted = (new DateTime($firstDayOfWeekFormatted))->format('d-m');
$lastDayOfWeekFormatted = (new DateTime($lastDayOfWeekFormatted))->format('d-m');
$client = new SportivityClient(13361);
$lessons = $client->getLocationLessons([])['LessonObjects'];
foreach ($lessons as $lesson) {
$startTime = DateTime::createFromFormat('d/m/Y H:i:s', $lesson['StartTime']);
$lessonDate = $startTime->format('d-m-Y');
if (!isset($weekdays[$lessonDate])) continue;
$lesson['LessonDate'] = $lessonDate;
$lesson['StartTimeConverted'] = $startTime->format('H:i');
$endTime = DateTime::createFromFormat('d/m/Y H:i:s', $lesson['EndTime']);
$lesson['EndTimeConverted'] = $endTime->format('H:i');
$interval = $endTime->diff($startTime);
$minutes = $interval->format('%i') + $interval->format('%h') * 60;
$lesson['Duration'] = $minutes;
$weekdays[$lessonDate]['lessons'][] = $lesson;
}
wp_send_json([
'selectedWeekNumber' => $selected_week_number,
'weekdays' => array_values($weekdays),
'firstDayOfWeek' => $firstDayOfWeekFormatted,
'lastDayOfWeek' => $lastDayOfWeekFormatted,
]);
}
Gek genoeg krijg ik 3-4 lege elementen extra er bij in de weekdays array waar niks in zit behalve een datum. Ik snap niet waarom hij die aanmaakt, want ik probeer het als ik het goed heb gedaan te omzeilen, dat alleen lessen mogen worden ingeschoten waarvan de datum in deze week zit. Weet iemand het probleem?
- je doet niets met de vraag of de huidige week misschien week 1 is, en je met $week-- op week 0 uitkomt.
- je kijkt wel of het week 52 is, maar er zijn jaren met 53 weken.
Mijn suggestie is om naar een rekendatum te kijken.
Bijvoorbeeld voor vandaag 22-3-2024. En als je prev moet hebben, haal je eerst 7 dagen van die rekendatum af, voor je week en jaar bepaalt.
Je doet trouwens ook niets met de mogelijkheid dat je van week 1 van 2024 naar de laatste week van 2023 springt of van 2024 naar 2025.
Dat zou dan ook opgelost zijn.
Over je vraag:
welke variabele bevat aan het eind van de rit te veel elementen. En is dat dan helemaal leeg, of zitten daarin weer andere lege elementen?
Hoe zou ik dat kunnen oplossen? Ik zat al best wel erg te stoeien met die hele rekenboel en kwam er bijna niet mee ruit.