Programación

PHP

Funciones para obtener fechas de semana santa por año

Última actualización: 15-09-2024 14:35
Clase cl_holyWeek con funciones para obtener: Importante:

Código

<?php
    // :: Funciones comunes para otras clases ::
    class cl_common {
        // Devuelve HTML de legibilidad facilitada de un arreglo
        function showArray($ar) {
            return '<pre style="padding:10px; background-color:#ccc;">' . print_r($ar, true) . '</pre>';
        }
    }
 
    // :: Cálculo de fechas de semana santa a partir de la función easter_days de PHP ::
    class cl_holyWeek extends cl_common {
 
        // Devuelve la fecha del "Domingo de Resurrección" del año solicitado
        function getLastDateOfYear($year = 0) {
            if ($year == 0) $year = date('Y');
            $easterDays = easter_days($year);
            $dt =  new DateTime(date('Y-m-d', strtotime($year . '-03-21')));
            $dt->add(new DateInterval('P' . $easterDays . 'D'));
            return $dt->format('Y-m-d');
        }
 
        // Devuelve arreglo con fechas de la semana santa del año solicitado
        function getDatesOfYear($year = 0) {
            if ($year == 0) $year = date('Y');
            $r = NULL;
            $diff1Day = new DateInterval('P1D');
            $diff1Day->invert = 1;
 
            $easterDays = easter_days($year);
 
            $dt =  new DateTime(date('Y-m-d', strtotime($year . '-03-21')));
            $dt->add(new DateInterval('P' . $easterDays . 'D'));
 
            $r =  array($dt->format('Y-m-d'));
            for ($i = 1; $i <= 3; $i++) {
                $dt->add($diff1Day);
                $r[] = $dt->format('Y-m-d');
            }
 
            return array_reverse($r);
        }
 
        // Devuelve arreglo con fechas de la semana santa del año solicitado agrupando por año
        function getDatesOfYearLikeGroup($year = 0) {
            $tmp = $this->getDatesOfYear($year);
            $starterYear = intval(substr($tmp[0], 0, 4));
            $r[$starterYear] = $tmp;
            return $r;
        }
 
        // Devuelve arreglo con fechas de la semana santa del rango de años solicitado
        function getDatesOfYears($starterYear = 0, $endingYear = 0) {
            $r = $this->getDatesOfYear($starterYear);
 
            $endingYear = ($endingYear <= 0 ? $starterYear : $endingYear);
 
            for ($i = $starterYear + 1; $i <= $endingYear; $i++)
                $r = array_merge($r, $this->getDatesOfYear($i));
 
            return $r;
        }
 
        // Devuelve arreglo con fechas de la semana santa del rango de años solicitado en grupos por año
        function getDateGroupsOfYears($starterYear = 0, $endingYear = 0) {
            if ($starterYear == 0) $starterYear = date('Y');
 
            $r = null;
 
            for ($i = $starterYear; $i <= $endingYear; $i++)
                $r[$i] = $this->getDatesOfYear($i);
 
            return $r;
        }
 
        // Devuelve el HTML de una tabla con el  listado de fechas por año del rango que se solicite
        function getHTMLResult($starterYear = 0, $endingYear = 0) {
            $r = '';
            $ar = $this->getDateGroupsOfYears($starterYear, $endingYear);
 
            $theadAndYearTD_Style = ' style="background-color: black; color:white;"';
            $oddRow = '';
            $evenRow = ' style="background-color:#eaeaea;"';
 
            $tID = 'tResultHolidayDates-' . md5(rand(1, 1000));
 
            $r .= '<style>'
                    . '#' . $tID . ' tbody tr:hover { background-color:#363636!important; color:white!important; }'
                    . '.tr-current-year { color:#006600; background-color:#7d7!important; font-weight:bold; }'
                    . '#' . $tID . ' .tr-current-year:hover { color:#007!important; background-color:#FC0!important;  }'
                . '</style>';
            $r .= '<table'
                        . ' id="' . $tID
                        . '" name="' . $tID . '"'
                        . ' style="width:100%; font-family:Verdana; text-align: center; border-collapse: collapse;"'
                        . ' cellpadding="10" border="1"'
                    . '>'
                        . '<thead' . $theadAndYearTD_Style . '>'
                            . '<tr>'
                                . '<th>Año</th>'
                                . '<th>Jueves Santo</th>'
                                . '<th>Viernes Santo</th>'
                                . '<th>Sábado de Gloria</th>'
                                . '<th>Domingo de Resurrección</th>'
                            . '</tr>'
                        . '</thead>'
                        . '<tbody>';
                            $nrow = 0;
                            $currentYear = intval(date('Y'));
                            foreach ($ar as $year => $arDate) {
                                $nrow++;
                                $r .= '<tr'
                                            . ($year == $currentYear ? ' class="tr-current-year" title="Este es el año en curso actualmente"' : '')
                                            . ($nrow % 2 == 0 ? $evenRow : $oddRow)
                                        . '>';
                                    $r .= '<td' . $theadAndYearTD_Style . '>' . $year . '</td>';
                                    foreach ($arDate as $idx => $xdate) $r .= '<td>' . $xdate . '</td>';
                                $r .= '</tr>';
                            }
                        $r .=  '</tbody>'
                    . '</table>';
 
            return $r;
        }
 
    }
 
    // Declaración de instancia de cl_holyWeek
    $o = new cl_holyWeek();
 
    // Definición de parámetros de año de inicio y año final del rango de consulta
    $currentYear = intval(date('Y'));
    $startYear = $currentYear - 2;
    $endYear = $currentYear + 2;
 
    $sTitleStyle = ' style="background-color:#069; color:#FFF; padding:4px;"';
    $xc = '';
    if (true) $xc .= '<div ' . $sTitleStyle . '>Función [getLastDateOfYear] :: Muestra fecha del Domingo de Resurrección del año en curso</div>'
                    . '<div style="padding: 10px; background-color:#ccc;">' . $o->getLastDateOfYear() . '</div>'
                    . '<hr/>';
 
    if (true) $xc .= '<div ' . $sTitleStyle . '>' . 'Función [getDatesOfYear] :: Devuelve arreglo con fechas de la semana santa del año solicitado' . '</div>'
                    . $o->showArray($o->getDatesOfYear()) . '<hr/>';
 
    if (true) $xc .= '<div ' . $sTitleStyle . '>' . 'Función [getDatesOfYearLikeGroup] :: Devuelve arreglo con fechas de la semana santa del año solicitado agrupando por año' . '</div>'
                    . $o->showArray($o->getDatesOfYearLikeGroup()) . '<hr/>';
 
    if (true) $xc .= '<div ' . $sTitleStyle . '>' . 'Función [getDatesOfYears] :: Devuelve arreglo con fechas de la semana santa del rango de años solicitado' . '</div>'
                    . $o->showArray($o->getDatesOfYears($startYear, $endYear)) . '<hr/>';
 
    if (true) $xc .= '<div ' . $sTitleStyle . '>' . 'Función [getDateGroupsOfYears] :: Devuelve arreglo con fechas de la semana santa del rango de años solicitado en grupos por año' . '</div>'
                    . $o->showArray($o->getDateGroupsOfYears($startYear, $endYear)) . '<hr/>';
 
    // Definición de parámetros de año de inicio y año final del rango de consulta
    $startYear = 1979;
    $endYear = 2040;
    if (true) $xc .= '<div ' . $sTitleStyle . '>' . 'Función [getHTMLResult] :: Devuelve el HTML de una tabla con el  listado de fechas por año del rango que se solicite' . '</div>'
                    . '<br/>'
                    . $o->getHTMLResult($startYear, $endYear);
 
    echo $xc;
?>

Resultado

Función [getLastDateOfYear] :: Muestra fecha del Domingo de Resurrección del año en curso
2024-03-31

Función [getDatesOfYear] :: Devuelve arreglo con fechas de la semana santa del año solicitado
Array
(
    [0] => 2024-03-28
    [1] => 2024-03-29
    [2] => 2024-03-30
    [3] => 2024-03-31
)

Función [getDatesOfYearLikeGroup] :: Devuelve arreglo con fechas de la semana santa del año solicitado agrupando por año
Array
(
    [2024] => Array
        (
            [0] => 2024-03-28
            [1] => 2024-03-29
            [2] => 2024-03-30
            [3] => 2024-03-31
        )

)

Función [getDatesOfYears] :: Devuelve arreglo con fechas de la semana santa del rango de años solicitado
Array
(
    [0] => 2022-04-14
    [1] => 2022-04-15
    [2] => 2022-04-16
    [3] => 2022-04-17
    [4] => 2023-04-06
    [5] => 2023-04-07
    [6] => 2023-04-08
    [7] => 2023-04-09
    [8] => 2024-03-28
    [9] => 2024-03-29
    [10] => 2024-03-30
    [11] => 2024-03-31
    [12] => 2025-04-17
    [13] => 2025-04-18
    [14] => 2025-04-19
    [15] => 2025-04-20
    [16] => 2026-04-02
    [17] => 2026-04-03
    [18] => 2026-04-04
    [19] => 2026-04-05
)

Función [getDateGroupsOfYears] :: Devuelve arreglo con fechas de la semana santa del rango de años solicitado en grupos por año
Array
(
    [2022] => Array
        (
            [0] => 2022-04-14
            [1] => 2022-04-15
            [2] => 2022-04-16
            [3] => 2022-04-17
        )

    [2023] => Array
        (
            [0] => 2023-04-06
            [1] => 2023-04-07
            [2] => 2023-04-08
            [3] => 2023-04-09
        )

    [2024] => Array
        (
            [0] => 2024-03-28
            [1] => 2024-03-29
            [2] => 2024-03-30
            [3] => 2024-03-31
        )

    [2025] => Array
        (
            [0] => 2025-04-17
            [1] => 2025-04-18
            [2] => 2025-04-19
            [3] => 2025-04-20
        )

    [2026] => Array
        (
            [0] => 2026-04-02
            [1] => 2026-04-03
            [2] => 2026-04-04
            [3] => 2026-04-05
        )

)

Función [getHTMLResult] :: Devuelve el HTML de una tabla con el listado de fechas por año del rango que se solicite

AñoJueves SantoViernes SantoSábado de GloriaDomingo de Resurrección
19791979-04-121979-04-131979-04-141979-04-15
19801980-04-031980-04-041980-04-051980-04-06
19811981-04-161981-04-171981-04-181981-04-19
19821982-04-081982-04-091982-04-101982-04-11
19831983-03-311983-04-011983-04-021983-04-03
19841984-04-191984-04-201984-04-211984-04-22
19851985-04-041985-04-051985-04-061985-04-07
19861986-03-271986-03-281986-03-291986-03-30
19871987-04-161987-04-171987-04-181987-04-19
19881988-03-311988-04-011988-04-021988-04-03
19891989-03-231989-03-241989-03-251989-03-26
19901990-04-121990-04-131990-04-141990-04-15
19911991-03-281991-03-291991-03-301991-03-31
19921992-04-161992-04-171992-04-181992-04-19
19931993-04-081993-04-091993-04-101993-04-11
19941994-03-311994-04-011994-04-021994-04-03
19951995-04-131995-04-141995-04-151995-04-16
19961996-04-041996-04-051996-04-061996-04-07
19971997-03-271997-03-281997-03-291997-03-30
19981998-04-091998-04-101998-04-111998-04-12
19991999-04-011999-04-021999-04-031999-04-04
20002000-04-202000-04-212000-04-222000-04-23
20012001-04-122001-04-132001-04-142001-04-15
20022002-03-282002-03-292002-03-302002-03-31
20032003-04-172003-04-182003-04-192003-04-20
20042004-04-082004-04-092004-04-102004-04-11
20052005-03-242005-03-252005-03-262005-03-27
20062006-04-132006-04-142006-04-152006-04-16
20072007-04-052007-04-062007-04-072007-04-08
20082008-03-202008-03-212008-03-222008-03-23
20092009-04-092009-04-102009-04-112009-04-12
20102010-04-012010-04-022010-04-032010-04-04
20112011-04-212011-04-222011-04-232011-04-24
20122012-04-052012-04-062012-04-072012-04-08
20132013-03-282013-03-292013-03-302013-03-31
20142014-04-172014-04-182014-04-192014-04-20
20152015-04-022015-04-032015-04-042015-04-05
20162016-03-242016-03-252016-03-262016-03-27
20172017-04-132017-04-142017-04-152017-04-16
20182018-03-292018-03-302018-03-312018-04-01
20192019-04-182019-04-192019-04-202019-04-21
20202020-04-092020-04-102020-04-112020-04-12
20212021-04-012021-04-022021-04-032021-04-04
20222022-04-142022-04-152022-04-162022-04-17
20232023-04-062023-04-072023-04-082023-04-09
20242024-03-282024-03-292024-03-302024-03-31
20252025-04-172025-04-182025-04-192025-04-20
20262026-04-022026-04-032026-04-042026-04-05
20272027-03-252027-03-262027-03-272027-03-28
20282028-04-132028-04-142028-04-152028-04-16
20292029-03-292029-03-302029-03-312029-04-01
20302030-04-182030-04-192030-04-202030-04-21
20312031-04-102031-04-112031-04-122031-04-13
20322032-03-252032-03-262032-03-272032-03-28
20332033-04-142033-04-152033-04-162033-04-17
20342034-04-062034-04-072034-04-082034-04-09
20352035-03-222035-03-232035-03-242035-03-25
20362036-04-102036-04-112036-04-122036-04-13
20372037-04-022037-04-032037-04-042037-04-05
20382038-04-222038-04-232038-04-242038-04-25
20392039-04-072039-04-082039-04-092039-04-10
20402040-03-292040-03-302040-03-312040-04-01

 

Política de Privacidad

Última actualización: 23 de diciembre de 2024

 X 

Tu privacidad es importante para nosotros. En esta política de privacidad, explicamos qué información recopilamos cuando visitas nuestro sitio web y cómo utilizamos esa información.

1. Información que recopilamos

Este sitio no recopila información personal de los usuarios, excepto cuando un usuario elige voluntariamente comunicarse a través del formulario de contacto. En ese caso, los datos proporcionados (como tu nombre y correo electrónico) se utilizarán únicamente para responder a tu consulta.

2. Uso de Cookies

Este sitio web utiliza una única cookie esencial llamada PHPSESSID.

No usamos cookies de análisis ni de seguimiento.

3. Seguridad de los datos

Adoptamos medidas técnicas y organizativas razonables para proteger cualquier información que compartas con nosotros contra el acceso no autorizado, pérdida o alteración.

4. Enlaces a sitios de terceros

Nuestro sitio web puede contener enlaces a otros sitios web. No somos responsables de las prácticas de privacidad ni del contenido de dichos sitios.

5. Cambios en esta política de privacidad

Nos reservamos el derecho de actualizar esta política de privacidad en cualquier momento. Cualquier cambio será publicado en esta misma página e incluirá la fecha de la última actualización.

6. Contacto

Si tienes preguntas o inquietudes sobre esta política de privacidad, puedes comunicarte con nosotros a través de la página de contacto disponible en este sitio web.

7. Cumplimiento con Normativas Internacionales de Privacidad

Nuestro sitio web cumple con las principales regulaciones internacionales de protección de datos personales para garantizar la privacidad y seguridad de los usuarios. Esto incluye, pero no se limita a, las siguientes leyes:

Si tienes preguntas o dudas sobre el cumplimiento de estas leyes, no dudes en ponerte en contacto conmigo a través de la página de contacto de este sitio web.