All pastes #73975 Raw Edit

Someone

public php v1 · immutable
#73975 ·published 2006-06-28 14:34 UTC
rendered paste body
function date_to_weeknum($date) {	// cette fonction calcule à partir d'une date le numéro de semaine associé	// "la premiere semaine de l'année est celle dans laquelle se trouve le premier jeudi de l'année"	$tmp_date = mktime(0,0,0,01,01,date("Y",$date));		// initialisation de la date de départ du calcul	// initialisation au premier lundi de l'année	// indique au passage si ce lundi appartient à la semaine 1 ou 2 de l'année	switch(date("w",$tmp_date)) {		case 1:			$tmp_date = mktime(0,0,0,01,01,date("Y",$date));			$tmp_delta_week = 0;			break;		case 0:			$tmp_date = mktime(0,0,0,01,02,date("Y",$date));			$tmp_delta_week = 0;			break;		case 6:			$tmp_date = mktime(0,0,0,01,03,date("Y",$date));			$tmp_delta_week = 0;			break;		case 5:			$tmp_date = mktime(0,0,0,01,04,date("Y",$date));			$tmp_delta_week = 0;			break;		case 4:			$tmp_date = mktime(0,0,0,01,05,date("Y",$date));			$tmp_delta_week = 1;			break;		case 3:			$tmp_date = mktime(0,0,0,01,06,date("Y",$date));			$tmp_delta_week = 1;			break;		case 2:			$tmp_date = mktime(0,0,0,01,07,date("Y",$date));			$tmp_delta_week = 1;			break;	}		if ($date >= $tmp_date) { 	// si la date recherchée est postérieure au premier lundi de l'année				// nombre de jours écoulés depuis la date de début du calcul		$tmp_nbjours = date("z",mktime(0,0,0,date("m",$date),date("d",$date),date("Y",$date)))-date("z",mktime(0,0,0,date("m",$tmp_date),date("d",$tmp_date),date("Y",$tmp_date)));				// nombre de semaines écoulées		$tmp_numsem = floor($tmp_nbjours/7)+$tmp_delta_week+1;		if ($tmp_numsem < 10) { $tmp_numsem = "0".$tmp_numsem; } // mise en forme du nombre de semaines				if ($tmp_numsem == 53) { 	// si on a trouvé la semainhe n°53 : attention au piège : n'est-ce pas une semaine 1 anticipée ?			//echo( date("d-m-Y",mktime(0,0,0,date("m",$date),date("d",$date)+delta_to_thursdaysameweek($date),date("Y",$date)))." || ".date("d-m-Y",mktime(0,0,0,01,01,date("Y",$date)+1)));			if ( date("Y",mktime(0,0,0,date("m",$date),date("d",$date)+delta_to_thursdaysameweek($date),date("Y",$date))) == date("Y",mktime(0,0,0,01,01,date("Y",$date)+1)) ) {				// si le jeudi de cette semaine tombe l'année prochaine alors on est en semaine 1				return "01";			} else {				// si le jeudi de cette semaine tombe cette année alors on est en semaine 53				return "53";			}		} else { 	// si on est en semaine 1 à 52, ok.			return $tmp_numsem;		}	} else { 	// si la date recherchée est antérieure au premier lundi de l'année		if ($tmp_delta_week == 1) {			// si on avait noté une semaine de décalage, les jours antérieurs au premier lundi sont tous en semaine 1			return "01";		} else {			// si on n'avait pas noté de semaine de décalage, les jours antérieurs au premier lundi sont tous de la meme semaine que la dernière semaine de l'année d'avant.			return date_to_weeknum(mktime(0,0,0,12,31,date("Y",$date)-1));		}	}}function date_to_weekyear($date) {	// cette fonction calcule à partir d'une date le numéro de semaine associé	// "la premiere semaine de l'année est celle dans laquelle se trouve le premier jeudi de l'année"	// l'année de la semaine de la date en cours est l'année du jeudi de la semaine de la date en cours	return date("Y",mktime(0,0,0,date("m",$date),date("d",$date)+delta_to_thursdaysameweek($date),date("Y",$date)));			}function delta_to_thursdaysameweek($date) {	if (date("w",$date)==0) {		return -3;	} else {		return 4-date("w",$date);	}}function numweek_to_date($numweek,$year,$dayOfWeek) {	// cette fonction calcule à partir d'un numéro de semaine, d'une année et d'un jour de semaine la date associée.	$tmp_date = mktime(0,0,0,01,01,$year);	// si les paramètres sont mal formatés, la fonction renvoie false	if (is_nan($numweek) || is_nan($year) || is_nan ($dayOfWeek) || $numweek > 53 || $numweek < 0 || $dayOfWeek < 0 || $dayOfWeek > 6 || $year <1970 || $year>2030) { 		return false;		exit;	}	// initialisation de la date de départ du calcul	// initialisation au premier lundi de l'année	// indique au passage si ce lundi appartient à la semaine 1 ou 2 de l'année	switch(date("w",$tmp_date)) {		case 1:			$tmp_date = mktime(0,0,0,01,01,$year);			$tmp_delta_week = 0;			break;		case 0:			$tmp_date = mktime(0,0,0,01,02,$year);			$tmp_delta_week = 0;			break;		case 6:			$tmp_date = mktime(0,0,0,01,03,$year);			$tmp_delta_week = 0;			break;		case 5:			$tmp_date = mktime(0,0,0,01,04,$year);			$tmp_delta_week = 0;			break;		case 4:			$tmp_date = mktime(0,0,0,01,05,$year);			$tmp_delta_week = 1;			break;		case 3:			$tmp_date = mktime(0,0,0,01,06,$year);			$tmp_delta_week = 1;			break;		case 2:			$tmp_date = mktime(0,0,0,01,07,$year);			$tmp_delta_week = 1;			break;	}	if ($dayOfWeek>=1 && $dayOfWeek<=6) {		$tmp_delta_day = $dayOfWeek -1;	} elseif ($dayOfWeek==0) {		$tmp_delta_day = 6;	}		$tmp_date = mktime(0,0,0,date("m",$tmp_date),date("d",$tmp_date)+($numweek-1-$tmp_delta_week)*7 + $tmp_delta_day,date("Y",$tmp_date));	//$tmp_date = date("d m Y",$tmp_date);	// en cas de semaine 53, on vérifie que la semaine 53 existe en effet, sinon on renvoie false	if ($numweek==53) {		if (numweek_to_date(01,$year+1,$dayOfWeek)==$tmp_date) {			//$tmp_date = false;			$tmp_date = numweek_to_date(52,$year,$dayOfWeek);		}	}	return $tmp_date;}