* Program....: NumDowOfMonth.prg * Version....: * Author.....: Sergey Berezniker , mod. Peter A. Cortiel * Date.......: 12/27/06 * Compiler...: Visual FoxPro 09.00.0000.3504 for Windows for Windows * Abstract...: original code by Sergey * I added to make it generic * to say eg 2nd Monday of Month * if only param 1 and 2 are given it defaults to 4th friday * ..: * Changes....: *FUNCTION FourthFridayOfMonth(tnYear, tnMonth,4,"FRI") LPARAMETERS tnYear, tnMonth , lnWeekNum , nFirstDayOfWeek LOCAL lnDOW , lnX1 nFirstDayOfWeek=EVL(nFirstDayOfWeek,"") lnWeekNum =EVL(lnWeekNum ,4) DO CASE CASE nFirstDayOfWeek="MON" lnX1 = 3 CASE nFirstDayOfWeek="TUE" lnX1 = 4 CASE nFirstDayOfWeek="WED" lnX1 = 5 CASE nFirstDayOfWeek="THU" lnX1 = 6 CASE nFirstDayOfWeek="FRI" lnX1 = 7 CASE nFirstDayOfWeek="SAT" lnX1 = 1 CASE nFirstDayOfWeek="SUN" lnX1 = 2 OTHERWISE lnX1 = 7 ENDCASE lnDOW = DOW(DATE(tnYear, tnMonth, 01), lnX1 ) TRY rtn=DATE(tnYear, tnMonth, 7 - lnDOW + 1 + (lnWeekNum -1)*7) ** added try endtry if for example the 5th friday does not exist CATCH rtn={} FINALLY ENDTRY RETURN rtn>
>FUNCTION FourthFridayOfMonth(tnYear, tnMonth) >LOCAL lnDOW >lnDOW = DOW(DATE(tnYear, tnMonth, 01), 7) >RETURN DATE(tnYear, tnMonth, 7 - lnDow + 1 + 3*7) > >* or one-liner >FUNCTION FourthFridayOfMonth(tnYear, tnMonth) >RETURN DATE(tnYear, tnMonth, 7 - DOW(DATE(tnYear, tnMonth, 01), 7) + 1 + 3*7) >>