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 :
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)
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)