Salut a tous et merci d'avance !

le problème est le suivant j'ai un calendrier de prise de rendez-vous qui bug a partir du mois mars car il zap le 29 février a cause de l'année bissextile,

voilà le morceau de code qui gère cette fonction :

<?php 

class Month {
   
    public  $days = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi'];
    private $months =['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'];
    public $month;
    public $year;

    public function __construct(int $month = null, int $year = null)
    {
        if($month === null || $month < 1 || $month > 12){
            $month = intval(date('m'));
        }

        if($year === null){
            $year = intval(date(('Y')));
        }

        if($year < 1970){
            throw new Exception("L'année est inférieur à 1970");
        }

        $this->month = $month;
        $this->year = $year;
    }

    public function getStartingDay(){
        return new DateTime("{$this->year}-{$this->month}-01");
    }

    public function toString(){
        return $this->months[$this->month - 1].' '.$this->year;
    }

    /*public function getWeeks(){
        $start = $this->getStartingDay();
        $start_clone = (clone $start); 
        $end = $start_clone->modify('+1 month -1 day');
        $weeks = intval($end->format('W')) - intval($start->format('W')) + 1;
        
        if($weeks == 6){
            $weeks = 5;
        }
        if($weeks < 0){
            $weeks = intval($end->format('W')); 
        }
        return $weeks; 
    }*/

    public function getWeeks(){
        $start = $this->getStartingDay()->modify('first day of this month');
        $startW = intval($start->format('W'));
        if($start->format('w') == 0){
            $start = (clone $start)->modify("+ 1 day");
            $startW = intval($start->format('W'));
        }elseif($start->format('w') == 6 ){
            $start = (clone $start)->modify("+ 2 days");
            $startW = intval($start->format('W'));
        }    
        $end = (clone $start)->modify('last day of this month');
        $endW = intval($end->format('W'));
        
        if(intval($end->format('m')) == 12 && $endW == 1){
            $endW = 53;
        }

        if(intval($start->format('m')) == 1 && $startW == 53){
            $startW = 0;
        }

        $weeks = ($endW - $startW) + 1;

        return $weeks; 
    }

    public function withinMonth (DateTime $date){
        return $this->getStartingDay()->format('Y-m') === $date->format('Y-m');
    }

    public function nextMonth(){
        $month = $this->month + 1;
        $year = $this->year;
        if($month > 12){
            $month = 1;
            $year += 1;
        }
        return new Month($month, $year);
    }

    public function previousMonth(){
        $month = $this->month - 1;
        $year = $this->year;
        if($month < 1){
            $month = 12;
            $year -= 1;
        }
        return new Month($month, $year);
    }
    
}

?>


Je ne suis pas développeur, mais j'essai de me former ^^.

merci de l'aide que vous pourriez m'apportez et si vous avez besoin de plus de précision je suis à votre dispo.
Modifié par aXurit (05 Feb 2020 - 14:16)
Modérateur
Et l'eau,

1. pourquoi n'utilises tu pas l'héritage ?
2. pourquoi return new Month ?
3. pourquoi return new DateTime ?
4. pourquoi mettre des attributs en public ?
5. (pour chipoter) Pourquoi je ne vois d'accesseur ?