Page 1 sur 1

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

Posté : 13 mai 2016, 10:29
par team94
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);
?>

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

Posté : 13 mai 2016, 13:27
par or 1
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.

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

Posté : 14 mai 2016, 12:08
par Ryle
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 :)