2017-03-17 1 views

Répondre

1

A1: Non, il n'y a pas de fonction intégrée pour cela.

A2: Oui, il existe plusieurs façons élégantes de résoudre ce problème. On pourrait ressembler à ceci:

int HowManyDaysInMONTH = { EMPTY,// stump 
          31, // Jan 
          28, // Feb + int LeapYear(const int aDate){...} 
          31, // Mar 
          30, // Aug 
          31, // May 
          30, // Jun 
          31, // Jul 
          31, // Aug 
          30, // Sep 
          31, // Oct 
          30, // Nov 
          31 // Dec 
          }; 
//-------------------------------------------------------------+ 
int LeapYear(const int aDateToTEST){ 
    return (366 == TimeDayOfYear(StringToTime(StringFormat("%4d.12.31", TimeYear(aDateToTEST)))) ? 1 
                              : 0 
      ) 
} 
//-------------------------------------------------------------+ 
PrintFormat("This month has %d days", 
       HowManyDaysInMONTH[TimeMonth(aDateTODAY)] 
       ); 

A3: Alternativement, on peut mettre en oeuvre cette combinaison soit.

bool IsLastMondayOfMONTH(const int aDateTODAY){ 
    return (TimeDayOfWeek(aDateTODAY) != 1 ? False 
               : TimeMonth(aDateTODAY) == TimeMONTH (aDateTODAY + 7) ? False 
                             : True 
      ); 
} 
+0

grâce à une excellente réponse et pour la modifier! –

2

ce que j'utilisé:

bool isLeapYear(const int _year){ 
    if(_year%4 == 0){ 
     if(_year%400 == 0)return true; 
     if(_year%100 > 0)return true; 
    } 
    return false; 
} 
int getDaysInMonth(MqlDateTime &mql){ 
    if(mql.mon==2) 
     return 28+isLeapYear(mql.year); 
    return 31-((mql.mon-1)%7)%2; 
} 

//your function to get number of days: 
MqlDateTime mql; 
TimeToStruct(TimeCurrent(),mql); 
int days = getDaysInMonth(mql); //result that you are looking for