Как узнать количество дней в текущем месяце с помощью MQL4?

Есть ли встроенная функция или какой-то элегантный способ получить количество дней в текущем месяце с помощью MQL4?

Или, в качестве альтернативы, есть ли способ определить последний понедельник текущего месяца?


person Boris Morozov    schedule 17.03.2017    source источник


Ответы (2)


A1: Нет, для этого нет встроенной функции.

A2: Да, есть несколько элегантных способов решить эту проблему. Можно было бы так:

 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: В качестве альтернативы можно реализовать такую ​​комбинацию.

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

это то, что я использовал:

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
person Daniel Kniaz    schedule 17.03.2017