PHP - Mostrar cantidad de días del mes restando festivos en Colombia

 
Vista:

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:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder