afficher la variable d'une fonction a l'exterieur de celle ci

Eléphanteau du PHP | 42 Messages

13 mai 2016, 10:29

Bonjour j'ai glaner sur le web une fonction qui marche trés bien pour compté les jour ouvré entre deux dates.

j'aimerais récupéré dans ma page les jours fériés deja calculés par la fonction ( donc en dehors de celle ci ) est ce possible ? comment Faire ?

je voudrais afficher par exemple la variable $an.

Merci d'avance.

je vous poste le code:
<?php


// Fonction permettant de compter le nombre de jours ouvrés entre deux dates
function get_nb_open_days($date_start, $date_stop) {	
	$arr_bank_holidays = array(); // Tableau des jours feriés	
	
	// On boucle dans le cas où l'année de départ serait différente de l'année d'arrivée
	$diff_year = date('Y', $date_stop) - date('Y', $date_start);
	for ($i = 0; $i <= $diff_year; $i++) {			
		$year = (int)date('Y', $date_start) + $i;
		// Liste des jours feriés
		$arr_bank_holidays[] = $year.'-01-01'; // Jour de l'an
		$arr_bank_holidays[] = $year.'-05-01'; // Fete du travail
		$arr_bank_holidays[] = $year.'-05-08'; // Victoire 1945
		$arr_bank_holidays[] = $year.'-07-14'; // Fete nationale
		$arr_bank_holidays[] = $year.'-08-15'; // Assomption
		$arr_bank_holidays[] = $year.'-11-01'; // Toussaint
		$arr_bank_holidays[] = $year.'-11-11'; // Armistice 1918
		$arr_bank_holidays[] = $year.'-12-25'; // Noel


				
		// Récupération de paques. Permet ensuite d'obtenir le jour de l'ascension et celui de la pentecote	
		$easter = easter_date($year);
		$arr_bank_holidays[] = date($year.'-m-d', $easter + 86400); // Paques
		$arr_bank_holidays[] = date($year.'-m-d', $easter + (86400*39)); // Ascension
		$arr_bank_holidays[] = date($year.'-m-d', $easter + (86400*50)); // Pentecote	

		$an=$arr_bank_holidays[0];
			
	}


	//
	$nb_days_open = 0;
	// Mettre <= si on souhaite prendre en compte le dernier jour dans le décompte	
	while ($date_start <= $date_stop) {
		// Si le jour suivant n'est ni un dimanche (0) ou un samedi (6), ni un jour férié, on incrémente les jours ouvrés	
		if (!in_array(date('w', $date_start), array(0, 6)) 
		&& !in_array(date('j_n_'.date('Y', $date_start), $date_start), $arr_bank_holidays)) {
			$nb_days_open++;		
		}
		$date_start = mktime(date('H', $date_start), date('i', $date_start), date('s', $date_start), date('m', $date_start), date('d', $date_start) + 1, date('Y', $date_start));			
	}		
	return $nb_days_open;
}

// Exemple : Du 11 au 15 juillet il n'y a qu'un jour ouvré (week-end + 1 jours férié)
$date_depart = strtotime('2016-07-11');
$date_fin = strtotime('2016-07-20');
$nb_jours_ouvres = get_nb_open_days($date_depart, $date_fin);
echo 'Il y a '.$nb_jours_ouvres.' jours ouvrés entre le '.date('d/m/Y', $date_depart).' et le '.date('d/m/Y', $date_fin);
?>

Mammouth du PHP | 2703 Messages

13 mai 2016, 13:27

soit faire une autre fonction, soit modifier la fonction pour qu'elle retourne un objet ou un tableau associatif au lieu d'une seule valeur.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 mai 2016, 12:08

Bonjour,

Tu peux effectivement faire une autre fonction ou retourner plusieurs valeurs avec celle-ci, mais le plus simple à mon sens est d'utiliser des variables avec une portée globale. Pour cela il faut que tu définisses ta variable en dehors de la fonction, puis dans la fonction que tu indiques que c'est à cette variable "externe" que tu fais référence :
var $an = 'valeur par défaut'; 
function get_nb_open_days($date_start, $date_stop) {	
   global $an;
   ...
}
Ainsi, si tu modifies la variable $an à l'intérieure de ta fonction, elle sera également altérée en dehors :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...