29 de abril de 2000

Calcular el domingo de pascua de un año

Con esta función podemos conocer la fecha del Domingo de Pascua de cualquier año.
*---------------------------------------------------------------
* FUNCTION _Pascua(tnAnio)
*---------------------------------------------------------------
* USE: _Pascua(1999)
* PARAMETRO: Año a calcular
* RETORNO: Fecha del Domingo de Pascua
*---------------------------------------------------------------
FUNCTION _Pascua(tnAnio)
  LOCAL lnCentena, lnAux, lnNroAureo, lnDomingo, lnEpactaJul, ;
    lnCorrSolar, lnCorrLunar, lnEpactaGreg, lnDiasLunaP, ;
    lnDiasLuna15, lnDiasPascua, ldFecIni, ldFecPascua

  IF NOT BETWEEN(tnAnio,1000,9999)
    MESSAGEBOX("Rango inválido [1000..9999]")
    RETURN {//}
  ENDIF

  lnCentena = INT(tnAnio / 100)
  lnAux = (tnAnio + 1) % 19
  lnNroAureo = lnAux + (19 * INT((19 - lnAux) / 19))
  lnDomingo = 7 + (1 - tnAnio - INT(tnAnio / 4) + lnCentena - INT(lnCentena / 4)) % 7
  lnEpactaJul = ((11 * lnNroAureo) - 10) % 30
  lnCorrSolar = - (lnCentena - 16) + INT((lnCentena- 16) / 4)
  lnCorrLunar = INT((lnCentena - 15 - INT((lnCentena - 17) / 25)) / 3)
  lnEpactaGreg = (30 + lnEpactaJul + lnCorrSolar + lnCorrLunar) % 30
  lnDiasLunaP = 24 - lnEpactaGreg + (30 * INT(lnEpactaGreg / 24))
  lnDiasLuna15 = (27 - lnEpactaGreg + (30 * INT(lnEpactaGreg / 24))) % 7
  lnDiasPascua = lnDiasLunaP + (7 + lnDomingo - lnDiasLuna15) % 7
  ldFecIni = DATE(tnAnio, 03, 21)
  ldFecPascua = ldFecIni + lnDiasPascua
  RETURN ldFecPascua
ENDFUNC

No hay comentarios. :

Publicar un comentario