:::: MENU ::::

Calcular dia útil com PHP

Como saber qual o 5º dia útil do mês por exemplo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Abstract class Date {
	/**
	 * Informa qual é o dia útil do mês
	 * Ex.: Caso deseja saber qual é o 15º útil do mês
	 * @param int $iDia = dia
	 * @param int $iMes = Mês, se não informado pega o mês atual
	 * @param int $iAno = Ano, se não informado pega o ano atual
	 * @return int
	 */
	public static function getDiaUtil($iDia, $iMes = null, $iAno = null, $aDiasIgnorar = array()) {
		$iMes = empty($iMes) ? date('m') : $iMes;
		$iAno = empty($iAno) ? date('Y') : $iAno;
		$iUltimoDiaMes = date("t", mktime(0, 0, 0, $iMes, '01', $iAno));
 
		for ($i = 1; $i <= $iUltimoDiaMes; $i++) {
			$iDiaSemana = date('N', mktime(0, 0, 0, $iMes, $i, $iAno));
			//inclui apenas os dias úteis
			if ($iDiaSemana < 6) {
				$aDias[] = date('j', mktime(0, 0, 0, $iMes, $i, $iAno));
			}
		}
		//ignorando os feriados	
		if (sizeof($aDiasIgnorar) > 0) {
			foreach ($aDiasIgnorar as $iDia) {
				$iKey = array_search($iDia, $aDias);
				unset($aDias[$iKey]);
			}
		}
 
		if (isset($aDias[$iDia - 1])) {
			return $aDias[$iDia - 1];
		} else {
			//retorna o último dia útil
			return $aDias[count($aDias) - 1];
		}
	}	
}

Como eu uso isso?

1
echo Date::getDiaUtil(5, 3, 2015); //9

So, what do you think ?