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:
- Fecha del "Domingo de Resurrección" del año solicitado.
- Arreglo con fechas de la semana santa del año solicitado.
- Arreglo con fechas de la semana santa del año solicitado agrupando por año.
- Arreglo con fechas de la semana santa del rango de años solicitado.
- Arreglo con fechas de la semana santa del rango de años solicitado en grupos por año.
- HTML de una tabla con el listado de fechas por año del rango que se solicite.
Importante:
- Esta clase se basa en la utilización de la función easter_days de PHP.'
(La función easter_date ponía como límite el año 2037 en versiones de 32 bits de servidores de publicación...
- No se han incluido verificaciones de validez de parámetros de las funciones.
<?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ño | Jueves Santo | Viernes Santo | Sábado de Gloria | Domingo de Resurrección |
---|
1979 | 1979-04-12 | 1979-04-13 | 1979-04-14 | 1979-04-15 |
1980 | 1980-04-03 | 1980-04-04 | 1980-04-05 | 1980-04-06 |
1981 | 1981-04-16 | 1981-04-17 | 1981-04-18 | 1981-04-19 |
1982 | 1982-04-08 | 1982-04-09 | 1982-04-10 | 1982-04-11 |
1983 | 1983-03-31 | 1983-04-01 | 1983-04-02 | 1983-04-03 |
1984 | 1984-04-19 | 1984-04-20 | 1984-04-21 | 1984-04-22 |
1985 | 1985-04-04 | 1985-04-05 | 1985-04-06 | 1985-04-07 |
1986 | 1986-03-27 | 1986-03-28 | 1986-03-29 | 1986-03-30 |
1987 | 1987-04-16 | 1987-04-17 | 1987-04-18 | 1987-04-19 |
1988 | 1988-03-31 | 1988-04-01 | 1988-04-02 | 1988-04-03 |
1989 | 1989-03-23 | 1989-03-24 | 1989-03-25 | 1989-03-26 |
1990 | 1990-04-12 | 1990-04-13 | 1990-04-14 | 1990-04-15 |
1991 | 1991-03-28 | 1991-03-29 | 1991-03-30 | 1991-03-31 |
1992 | 1992-04-16 | 1992-04-17 | 1992-04-18 | 1992-04-19 |
1993 | 1993-04-08 | 1993-04-09 | 1993-04-10 | 1993-04-11 |
1994 | 1994-03-31 | 1994-04-01 | 1994-04-02 | 1994-04-03 |
1995 | 1995-04-13 | 1995-04-14 | 1995-04-15 | 1995-04-16 |
1996 | 1996-04-04 | 1996-04-05 | 1996-04-06 | 1996-04-07 |
1997 | 1997-03-27 | 1997-03-28 | 1997-03-29 | 1997-03-30 |
1998 | 1998-04-09 | 1998-04-10 | 1998-04-11 | 1998-04-12 |
1999 | 1999-04-01 | 1999-04-02 | 1999-04-03 | 1999-04-04 |
2000 | 2000-04-20 | 2000-04-21 | 2000-04-22 | 2000-04-23 |
2001 | 2001-04-12 | 2001-04-13 | 2001-04-14 | 2001-04-15 |
2002 | 2002-03-28 | 2002-03-29 | 2002-03-30 | 2002-03-31 |
2003 | 2003-04-17 | 2003-04-18 | 2003-04-19 | 2003-04-20 |
2004 | 2004-04-08 | 2004-04-09 | 2004-04-10 | 2004-04-11 |
2005 | 2005-03-24 | 2005-03-25 | 2005-03-26 | 2005-03-27 |
2006 | 2006-04-13 | 2006-04-14 | 2006-04-15 | 2006-04-16 |
2007 | 2007-04-05 | 2007-04-06 | 2007-04-07 | 2007-04-08 |
2008 | 2008-03-20 | 2008-03-21 | 2008-03-22 | 2008-03-23 |
2009 | 2009-04-09 | 2009-04-10 | 2009-04-11 | 2009-04-12 |
2010 | 2010-04-01 | 2010-04-02 | 2010-04-03 | 2010-04-04 |
2011 | 2011-04-21 | 2011-04-22 | 2011-04-23 | 2011-04-24 |
2012 | 2012-04-05 | 2012-04-06 | 2012-04-07 | 2012-04-08 |
2013 | 2013-03-28 | 2013-03-29 | 2013-03-30 | 2013-03-31 |
2014 | 2014-04-17 | 2014-04-18 | 2014-04-19 | 2014-04-20 |
2015 | 2015-04-02 | 2015-04-03 | 2015-04-04 | 2015-04-05 |
2016 | 2016-03-24 | 2016-03-25 | 2016-03-26 | 2016-03-27 |
2017 | 2017-04-13 | 2017-04-14 | 2017-04-15 | 2017-04-16 |
2018 | 2018-03-29 | 2018-03-30 | 2018-03-31 | 2018-04-01 |
2019 | 2019-04-18 | 2019-04-19 | 2019-04-20 | 2019-04-21 |
2020 | 2020-04-09 | 2020-04-10 | 2020-04-11 | 2020-04-12 |
2021 | 2021-04-01 | 2021-04-02 | 2021-04-03 | 2021-04-04 |
2022 | 2022-04-14 | 2022-04-15 | 2022-04-16 | 2022-04-17 |
2023 | 2023-04-06 | 2023-04-07 | 2023-04-08 | 2023-04-09 |
2024 | 2024-03-28 | 2024-03-29 | 2024-03-30 | 2024-03-31 |
2025 | 2025-04-17 | 2025-04-18 | 2025-04-19 | 2025-04-20 |
2026 | 2026-04-02 | 2026-04-03 | 2026-04-04 | 2026-04-05 |
2027 | 2027-03-25 | 2027-03-26 | 2027-03-27 | 2027-03-28 |
2028 | 2028-04-13 | 2028-04-14 | 2028-04-15 | 2028-04-16 |
2029 | 2029-03-29 | 2029-03-30 | 2029-03-31 | 2029-04-01 |
2030 | 2030-04-18 | 2030-04-19 | 2030-04-20 | 2030-04-21 |
2031 | 2031-04-10 | 2031-04-11 | 2031-04-12 | 2031-04-13 |
2032 | 2032-03-25 | 2032-03-26 | 2032-03-27 | 2032-03-28 |
2033 | 2033-04-14 | 2033-04-15 | 2033-04-16 | 2033-04-17 |
2034 | 2034-04-06 | 2034-04-07 | 2034-04-08 | 2034-04-09 |
2035 | 2035-03-22 | 2035-03-23 | 2035-03-24 | 2035-03-25 |
2036 | 2036-04-10 | 2036-04-11 | 2036-04-12 | 2036-04-13 |
2037 | 2037-04-02 | 2037-04-03 | 2037-04-04 | 2037-04-05 |
2038 | 2038-04-22 | 2038-04-23 | 2038-04-24 | 2038-04-25 |
2039 | 2039-04-07 | 2039-04-08 | 2039-04-09 | 2039-04-10 |
2040 | 2040-03-29 | 2040-03-30 | 2040-03-31 | 2040-04-01 |