Created
September 9, 2023 22:32
-
-
Save jcvasquez07/69bdcbcd2fbe96db4d32c98d85de875e to your computer and use it in GitHub Desktop.
Determinación de las fechas de Semana Santa
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Determina la fecha del jueves y viernes santo para el año en curso usando el | |
* Algoritmo de Butcher, del «Almanaque Eclesiástico» de 1876, válido a partir de 1582 | |
* Ref: https://blog.cardila.com/2007/04/02/como-calcular-la-fecha-de-la-semana-santa/ | |
* | |
* @return Array | |
*/ | |
function semana_santa($año = null) { | |
if($año == null) { | |
$año = date('Y'); | |
} | |
$a = $año % 19; | |
$b = intdiv($año, 100); | |
$c = $año % 100; | |
$d = intdiv($b, 4); | |
$e = $b % 4; | |
$f = intdiv(($b + 8), 25); | |
$g = intdiv(($b - $f + 1), 3); | |
$h = (19 * $a + $b - $d - $g + 15) % 30; | |
$i = intdiv($c, 4); | |
$k = $c % 4; | |
$l = (32 + 2 * $e + 2 * $i - $h - $k) % 7; | |
$m = intdiv(($a + 11 * $h + 22 * $l), 451); | |
$n = $h + $l - 7 * $m + 114; | |
// Estos dos valores son numéricos | |
$mes = intdiv($n, 31); | |
$dia = 1 + ($n % 31); | |
// Formato: AAAA-MM-DD | |
$domingo_resurreccion = $año . "-" . str_pad($mes, 2, '0', STR_PAD_LEFT) . "-" . str_pad($dia, 2, '0', STR_PAD_LEFT); | |
// Determinamos las fechas del jueves, viernes y domingo (formato DD-MM-AAAA) | |
$domingo = date($domingo_resurreccion); | |
$jueves_santo = date("d-m-Y", strtotime('-3 day', strtotime($domingo))); | |
$viernes_santo = date("d-m-Y", strtotime('-2 day', strtotime($domingo))); | |
$domingo_santo = date("d-m-Y", strtotime($domingo)); | |
return [$jueves_santo, $viernes_santo, $domingo_santo]; | |
} | |
// EJEMPLOS DE USO | |
// Este año | |
echo '<p>Jueves Santo año actual<br>'; | |
echo semana_santa()[0] . "<br>"; | |
echo '<p>Viernes Santo año actual <br>'; | |
echo semana_santa()[1] . "<br>"; | |
echo '<p>Domingo de Resurrección (Butcher) año actual <br>'; | |
echo semana_santa()[2] . "<br><br>"; | |
// Año 2015 | |
$año = 2015; | |
echo '<p>Jueves Santo ' . $año . '<br>'; | |
echo semana_santa($año)[0] . "<br>"; | |
echo '<p>Viernes Santo ' . $año . '<br>'; | |
echo semana_santa($año)[1] . "<br>"; | |
echo '<p>Domingo de Resurrección (Butcher) ' . $año . '<br>'; | |
echo semana_santa($año)[2] . "<br>"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment