Return Type | Function name | Arguments |
---|---|---|
hzEcode | hzCron::Retard | (hzXDate&,unsigned int,) |
Declared in file: hzCron.h
Defined in file : hzCron.cpp
Function Logic:
Function body:
hzEcode hzCron::Retard (hzXDate& date, unsigned int factor) { _hzfunc("hzCron::Advance(hzXDate)") ; uint32_t Y ; uint32_t M ; uint32_t dow ; uint32_t alt ; if (!m_bActive) { date.Clear() ; m_error = "Interval not active" ; return E_NOINIT ; } if (factor < 1) { m_error = "Factor must be 1 or more" ; return E_ARGUMENT ; } if (!date.IsSet()) date.SysDateTime() ; do { Y = date.Year() ; M = date.Month() ; dow = date.Dow() ; if (m_Period == HZPERIOD_DAY) { alt = 1; date.altdate(DAY, -alt) ; } // Mon - Sat", else if (m_Period == HZPERIOD_MONSAT) { alt = dow==0? 2: 1; date.altdate(DAY, -alt) ; } // Weekdays only else if (m_Period == HZPERIOD_WEEKDAY) { alt = dow>4? dow - 4: dow ? 1: 3; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_EMON) { alt = dow>0? dow : 7; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ETUE) { alt = dow>1? dow - 1: dow + 6; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_EWED) { alt = dow>2? dow - 2: dow + 5; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ETHR) { alt = dow>3? dow - 3: dow + 4; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_EFRI) { alt = dow>4? dow - 4: dow + 3; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ESAT) { alt = dow>5? dow - 5: dow + 2; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ESUN) { alt = dow + 1; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ALT_MON) { alt = dow>0? dow : 7; alt += 7; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ALT_TUE) { alt = dow>1? dow - 1: dow + 6; alt += 7; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ALT_WED) { alt = dow>2? dow - 2: dow + 5; alt += 7; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ALT_THR) { alt = dow>3? dow - 3: dow + 4; alt += 7; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ALT_FRI) { alt = dow>4? dow - 4: dow + 3; alt += 7; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ALT_SAT) { alt = dow>5? dow - 5: dow + 2; alt += 7; date.altdate(DAY, -alt) ; } else if (m_Period == HZPERIOD_ALT_SUN) { alt = dow + 1; alt += 7; date.altdate(DAY, -alt) ; } else { switch (m_Period) { case HZPERIOD_MONTH: M-- ; break ; case HZPERIOD_MONTH1: case HZPERIOD_MONTH2: alt = M % 2; M -= alt ? alt : 2; break ; case HZPERIOD_QTR1: case HZPERIOD_QTR2: case HZPERIOD_QTR3: alt = M % 3; M -= alt ? alt : 3; break ; case HZPERIOD_HYEAR1: case HZPERIOD_HYEAR2: case HZPERIOD_HYEAR3: case HZPERIOD_HYEAR4: case HZPERIOD_HYEAR5: case HZPERIOD_HYEAR6: alt = M % 6; M -= alt ? alt : 6; break ; case HZPERIOD_YEAR1: case HZPERIOD_YEAR2: case HZPERIOD_YEAR3: case HZPERIOD_YEAR4: case HZPERIOD_YEAR5: case HZPERIOD_YEAR6: case HZPERIOD_YEAR7: case HZPERIOD_YEAR8: case HZPERIOD_YEAR9: case HZPERIOD_YEAR10: case HZPERIOD_YEAR11: case HZPERIOD_YEAR12: Y-- ; break ; } if (M < 1) { Y-- ; M += 12;} date.SetDate(Y, M, 1); } if (!IsHoliday(date, m_exclhols)) factor-- ; } while (factor) ; return E_OK ; }