Mostrar cantidad de días del mes restando festivos en Colombia
Publicado por yes id (1 intervención) el 10/09/2018 16:41:53
Buen día.
En este enlace https://pastebin.com/WQnp0s0W encontré la siguiente clase para calcular festivos:
Si recibo un mes y un año a través del método POST, ¿Cómo puedo usar la clase Festivos para que muestre la cantidad de días del mes del año recibidos por POST, restando los días festivos?
Por ejemplo: el número de días, exceptuando festivos, del mes 03 de 2018 es 28
En este enlace https://pastebin.com/WQnp0s0W encontré la siguiente clase para calcular festivos:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
class Festivos
{
private $hoy;
private $festivos;
private $ano;
private $pascua_mes;
private $pascua_dia;
public function getFestivos($ano=''){
$this->festivos($ano);
return $this->festivos;
}
public function festivos($ano='')
{
$this->hoy=date('d/m/Y');
if($ano=='')
$ano=date('Y');
$this->ano=$ano;
$this->pascua_mes=date("m", easter_date($this->ano));
$this->pascua_dia=date("d", easter_date($this->ano));
$this->festivos[$ano][1][1] = true; // Primero de Enero
$this->festivos[$ano][5][1] = true; // Dia del Trabajo 1 de Mayo
$this->festivos[$ano][7][20] = true; // Independencia 20 de Julio
$this->festivos[$ano][8][7] = true; // Batalla de Boyacá 7 de Agosto
$this->festivos[$ano][12][8] = true; // Maria Inmaculada 8 diciembre (religiosa)
$this->festivos[$ano][12][25] = true; // Navidad 25 de diciembre
$this->calcula_emiliani(1, 6); // Reyes Magos Enero 6
$this->calcula_emiliani(3, 19); // San Jose Marzo 19
$this->calcula_emiliani(6, 29); // San Pedro y San Pablo Junio 29
$this->calcula_emiliani(8, 15); // Asunción Agosto 15
$this->calcula_emiliani(10, 12); // Descubrimiento de América Oct 12
$this->calcula_emiliani(11, 1); // Todos los santos Nov 1
$this->calcula_emiliani(11, 11); // Independencia de Cartagena Nov 11
//otras fechas calculadas a partir de la pascua.
$this->otrasFechasCalculadas(-3); //jueves santo
$this->otrasFechasCalculadas(-2); //viernes santo
$this->otrasFechasCalculadas(43,true); //Ascención el Señor pascua
$this->otrasFechasCalculadas(64,true); //Corpus Cristi
$this->otrasFechasCalculadas(71,true); //Sagrado Corazón
// otras fechas importantes que no son festivos
// $this->otrasFechasCalculadas(-46); // Miércoles de Ceniza
// $this->otrasFechasCalculadas(-46); // Miércoles de Ceniza
// $this->otrasFechasCalculadas(-48); // Lunes de Carnaval Barranquilla
// $this->otrasFechasCalculadas(-47); // Martes de Carnaval Barranquilla
}
protected function calcula_emiliani($mes_festivo,$dia_festivo)
{
// funcion que mueve una fecha diferente a lunes al siguiente lunes en el
// calendario y se aplica a fechas que estan bajo la ley emiliani
//global $y,$dia_festivo,$mes_festivo,$festivo;
// Extrae el dia de la semana
// 0 Domingo 6 Sábado
$dd = date("w",mktime(0,0,0,$mes_festivo,$dia_festivo,$this->ano));
switch ($dd) {
case 0: // Domingo
$dia_festivo = $dia_festivo + 1;
break;
case 2: // Martes.
$dia_festivo = $dia_festivo + 6;
break;
case 3: // Miércoles
$dia_festivo = $dia_festivo + 5;
break;
case 4: // Jueves
$dia_festivo = $dia_festivo + 4;
break;
case 5: // Viernes
$dia_festivo = $dia_festivo + 3;
break;
case 6: // Sábado
$dia_festivo = $dia_festivo + 2;
break;
}
$mes = date("n", mktime(0,0,0,$mes_festivo,$dia_festivo,$this->ano))+0;
$dia = date("d", mktime(0,0,0,$mes_festivo,$dia_festivo,$this->ano))+0;
$this->festivos[$this->ano][$mes][$dia] = true;
}
protected function otrasFechasCalculadas($cantidadDias=0,$siguienteLunes=false)
{
$mes_festivo = date("n", mktime(0,0,0,$this->pascua_mes,$this->pascua_dia+$cantidadDias,$this->ano));
$dia_festivo = date("d", mktime(0,0,0,$this->pascua_mes,$this->pascua_dia+$cantidadDias,$this->ano));
if ($siguienteLunes)
{
$this->calcula_emiliani($mes_festivo, $dia_festivo);
}
else
{
$this->festivos[$this->ano][$mes_festivo+0][$dia_festivo+0] = true;
}
}
public function esFestivo($dia,$mes)
{
//echo (int)$mes;
if($dia=='' or $mes=='')
{
return false;
}
if (isset($this->festivos[$this->ano][(int)$mes][(int)$dia]))
{
return true;
}
else
{
return false;
}
}
}
?>
Si recibo un mes y un año a través del método POST, ¿Cómo puedo usar la clase Festivos para que muestre la cantidad de días del mes del año recibidos por POST, restando los días festivos?
Por ejemplo: el número de días, exceptuando festivos, del mes 03 de 2018 es 28
1
2
3
4
5
<?php
$month = $_POST["month"];
$year = $_POST["year"];
$days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
?>
Valora esta pregunta


0