Week array met lessen erin

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jorn Reed

Jorn Reed

21/03/2024 16:02:50
Quote Anchor link
Hoi ik heb een script geschreven die altijd een array maakt van de huidige week (of een week waar je heen navigeert). Je kan in de html op vorige/volgende klikken etc.
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)
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
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,
        ]);
    }


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?
 
PHP hulp

PHP hulp

23/11/2024 11:11:06
 
Ivo P

Ivo P

22/03/2024 08:43:13
Quote Anchor link
suggenstie voor je ingewikkelde prev/next routine op 7 tm 11:

- 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?
 
Jorn Reed

Jorn Reed

22/03/2024 10:31:26
Quote Anchor link
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.
 
Jan Koehoorn

Jan Koehoorn

17/04/2024 18:02:33
Quote Anchor link
Een quick & dirty fix: vlak voor de aanroep van wp_send_json:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $weekdays
= array_filter($weekdays);
?>
 



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.