Easter

Post Reply
User avatar
Eoeo
Posts: 222
Joined: Mon Jun 04, 2012 12:00 pm

Easter

Post by Eoeo »

Do you have a func to calc the day of Easter ?
ADutheil
Posts: 352
Joined: Sun May 31, 2009 6:25 pm
Location: Salvador - Bahia - Brazil

Re: Easter

Post by ADutheil »

Code: Select all

c = a/100
n = a - [19×(a/19)]
k = (c - 17)/25
i = c - c/4 - [(c-k)/3] +(19×n) + 15
i = i - [30×(i/30)]
i = i - {(i/28)×[1-(i/28)]×[29/(i+1)]×[(21-n)/11]}
j = a + a/4 + i + 2 -c + c/4
j = j - [7×(j/7)]
z = i - j

m = 3 + [(z+40)/44]
d = z + 28 - [31×(m/4)]
 
a is the year you want to know easter day
m= month
d= day
[/code]
Regards,

André Dutheil
FWH 13.04 HB 3.2 BCC 5.82 MinGW 4.5.2 MSVS 10
StefanHaupt
Posts: 824
Joined: Thu Oct 13, 2005 7:39 am
Location: Germany

Re: Easter

Post by StefanHaupt »

you can use the function FT_Easter() from libnf.lib

Code: Select all

dEaster := FT_Easter (Year(dDate))
kind regards
Stefan
User avatar
ukoenig
Posts: 3981
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany
Contact:

Re: Easter

Post by ukoenig »

Stefan,

I used this function, but with some changes because of a formatted RETURN-string:

Code: Select all

SET CENTURY ON

//SET DATE AMERICAN
//MsgAlert( EASTER( 2013, "A", .T. ), "Amer. Easter 2013" )

//SET DATE ANSI
//MsgAlert( EASTER( 2013, "N", .T. ), "Ansi Easter 2013" )

//SET DATE BRITISH
//MsgAlert( EASTER( 2013, "B", .T. ), "English Easter 2013" )

//SET DATE FRENCH
//MsgAlert( EASTER( 2013, "F", .T. ), "French Easter 2013" )

//SET DATE GERMAN 
//MsgAlert( EASTER( 2013, "G", .T. ), "German Ostern 2013" )

SET DATE ITALIAN
MsgAlert( EASTER( 2013, "I", .T. ), "Italien Easter 2013" )

//SET DATE JAPAN
//MsgAlert( EASTER( 2013, "J", .T. ), "Japan Easter 2013" )

//SET DATE USA
//MsgAlert( EASTER( 2013, "U", .T. ), "USA Easter 2013" )

/*
SYNTAX
FT_EASTER( <xYear> ) -> dEdate
ARGUMENTS
xYear can be a character, date or numeric describing the year
for which you wish to receive the date of Easter.
RETURNS
The actual date that Easter occurs.
DESCRIPTION
Returns the date of Easter for any year after 1582 up to Clipper's
limit which the manual states is 9999, but the Guide agrees with
the actual imposed limit of 2999.
EXAMPLES
dEdate := EASTER( 1990 )    returns 04/15/1990
*/ 

FUNCTION EASTER (nYear, cNat, lCent )
local nGold, nCent, nCorx, nCorz, nSunday, nEpact, nMoon,;
        nMonth := 0, nDay := 0
// --------------------------------
// NOTE: __SetCentury() is internal
// --------------------------------

IF VALTYPE (nYear) == "C"
     nYear = VAL(nYear)
ENDIF

IF VALTYPE (nYear) == "D"
     nYear = YEAR(nYear)
ENDIF

IF VALTYPE (nYear) == "N"
    IF nYear > 1582
        // <<nGold>> is Golden number of the year in the 19 year Metonic cycle
        nGold = nYear % 19 + 1
        // <<nCent>> is Century
        nCent = INT (nYear / 100) + 1
        // Corrections:
        // <<nCorx>> is the no. of years in which leap-year was dropped in order
        // to keep step with the sun
        nCorx = INT ((3 * nCent) / 4 - 12)
        // <<nCorz>> is a special correction to synchronize Easter with the moon's
        // orbit.
        nCorz = INT ((8 * nCent + 5) / 25 - 5)
        // <<nSunday>> Find Sunday
        nSunday = INT ((5 * nYear) / 4 - nCorx - 10)
        // Set Epact <<nEpact>> (specifies occurance of a full moon)
        nEpact = INT ((11 * nGold + 20 + nCorz - nCorx) % 30)
        IF nEpact < 0
            nEpact += 30
        ENDIF
        IF ((nEpact = 25) .AND. (nGold > 11)) .OR. (nEpact = 24)
            ++nEpact
        ENDIF
        // Find full moon - the <<nMoon>>th of MARCH is a "calendar" full moon
        nMoon = 44 - nEpact
        IF nMoon < 21
            nMoon += 30
        ENDIF
        // Advance to Sunday
        nMoon = INT (nMoon + 7 - ((nSunday + nMoon) % 7))
        // Get Month and Day
        IF nMoon > 31
            nMonth = 4
            nDay = nMoon - 31
        ELSE
            nMonth = 3
            nDay = nMoon
        ENDIF
    ENDIF
ELSE
    nYear = 0
ENDIF

SET CENTURY (lCent)

IF cNat = "A"   // American
    RETURN  CTOD ( RIGHT ("00"+LTRIM (STR (nMonth)),2) + "/" +;
                       RIGHT ("00"+LTRIM (STR (INT (nDay))) ,2) + "/" + ;
                       STR (nYear,4))
ENDIF
IF cNat = "N"   // Ansi
    RETURN  CTOD ( STR (nYear,4) + "." +;
                       RIGHT ("00"+LTRIM (STR (nMonth)),2) + "." +;
                                   RIGHT ("00"+LTRIM (STR (INT (nDay))) ,2) )
ENDIF
IF cNat = "B"   // British 
    RETURN  CTOD ( RIGHT ("00"+LTRIM (STR (INT (nDay))) ,2) + "/" + ;
                       RIGHT ("00"+LTRIM (STR (nMonth)),2) + "/" +;
                       STR (nYear,4) ) 
ENDIF
IF cNat = "F"   // French
    RETURN  CTOD ( RIGHT ("00"+LTRIM (STR (INT (nDay))) ,2) + "/" + ;
                       RIGHT ("00"+LTRIM (STR (nMonth)),2) + "/" +;
                       STR (nYear,4) ) 
ENDIF
IF cNat = "G"   // German
    RETURN  CTOD ( RIGHT ("00"+LTRIM (STR (INT (nDay))) ,2) + "." + ;
                       RIGHT ("00"+LTRIM (STR (nMonth)),2) + "." +;
                       STR (nYear,4) ) 
ENDIF
IF cNat = "I"   // Italien
    RETURN  CTOD ( RIGHT ("00"+LTRIM (STR (INT (nDay))) ,2) + "-" + ;
                       RIGHT ("00"+LTRIM (STR (nMonth)),2) + "-" +;
                       STR (nYear,4) ) 
ENDIF
IF cNat = "J"   // Japan
    RETURN  CTOD ( STR (nYear,4) + "/" +;
                       RIGHT ("00"+LTRIM (STR (nMonth)),2) + "/" +;
                                   RIGHT ("00"+LTRIM (STR (INT (nDay))) ,2) )
ENDIF
IF cNat = "U"   // USA
    RETURN  CTOD ( RIGHT ("00"+LTRIM (STR (nMonth)),2) + "-" +;
                       RIGHT ("00"+LTRIM (STR (INT (nDay))) ,2) + "-" + ;
                       STR (nYear,4))
ENDIF
 
Best Regards
Uwe :lol:
Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Re: Easter

Post by Otto »

Silvio,
use this table:
2010 04. April
2011 24. April
2012 08. April
2013 31. März
2014 20. April
2015 05. April
2016 27. März
2017 16. April
2018 01. April
2019 21. April
2020 12. April
2021 04. April
2022 17. April
2023 09. April
2024 31. März
2025 20. April
2026 05. April
2027 28. März
2028 16. April
2029 01. April
2030 21. April
Best regards,
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org

********************************************************************
User avatar
Eoeo
Posts: 222
Joined: Mon Jun 04, 2012 12:00 pm

Re: Easter

Post by Eoeo »

thanks friends to all

I made TimeCard for Employes of a Farm and I 'm thinking to create a xbrowse table
with the first column ( Number/name of day) then I with change color when the day is sunday or insert also all national holidays as Easter or xmax



for sample


I made this for dicember you can see the day 25 and 26 in color


Image


I use a string for the first column ( sample: 25 Ma or 26 Me)

cTesto:= oBrw:aRow[ 1 ]

...
CASE nMese=12 //dicember
// 8 dic
// 25 dic
// 26 dic


IF LEFT(alltrim(ctesto),2)="8 " .OR. ;
LEFT(alltrim(ctesto),2)="25" .OR. LEFT(alltrim(ctesto),2)="26";
.OR. RIGHT(ctesto,2)="Do"
nColor :=Color_Rosa
else
nColor := GetSysColor( 5 )
ENDIF

....



and I wish found also Easter day to change the color...
User avatar
Eoeo
Posts: 222
Joined: Mon Jun 04, 2012 12:00 pm

Re: Easter

Post by Eoeo »

I need the number of Month when is the easter and the number od the day

For the 2013

sample : nmese:= 3
cDay:="31"
User avatar
ukoenig
Posts: 3981
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany
Contact:

Re: Easter

Post by ukoenig »

Silvio,

the given Function returns all Infos You need :

SET DATE ITALIAN
dEastern := EASTER( 2013, "I", .T. )

MsgAlert( "Date : " + DTOC ( dEastern ) + CRLF + ;
"Day : " + ALLTRIM(STR(DAY( dEastern ) ) ) + CRLF + ;
"Month : " + ALLTRIM(STR(MONTH( dEastern ) ) ), "Italien Easter 2013" )


Image

Best Regards
Uwe :lol:
Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
Post Reply